perm filename USERS.RLL[RDG,DBL] blob sn#638529 filedate 1982-01-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00030 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00004 00002	See all RLL.BBD[rdg,dbl], 
C00005 00003		Messages with Steve Klein (ISI)
C00037 00004		(klein, con't)
C00044 00005		(klein, con't)
C00066 00006		(klein, con't)
C00095 00007		(klein, con't)
C00102 00008		(klein, con't - then p.17)
C00107 00009	∂TO CSD.SMITH@SCORE (CC SKLEIN@ISIB) 14:37 10-Aug
C00108 00010		RLL Mini-Tutuorial - ca 3-7 August 1981 - Klein, Jonathan King, Greep
C00119 00011		Follow up conversations with Steve Klein (from 12-Aug-81 on)
C00132 00012		(klein, con't)
C00154 00013		(klein, con't)
C00189 00014	∂22-Sep-81  1613	Steve Klein <SKLEIN at USC-ISIB> 	smaller response to previous msg    
C00194 00015		(MANN at ISIB)
C00197 00016	∂TO SKLEIN@ISIB 10:06 28-Sept
C00211 00017	∂TO SKLEIN (CC MANN) 15:48 12-Oct
C00214 00018	∂TO SKLEIN 15:57 12-Oct
C00281 00019	∂19-Oct-81  1345	Steve Klein <SKLEIN at USC-ISIB> 	Reincarnation   
C00285 00020	∂TO SKLEIN 11:48 21-Oct
C00301 00021	∂ 1 Nov 1981 1241-PST	<GREINER>	Come and get it!
C00308 00022	∂06-Nov-81  1710	Steve Klein <SKLEIN at USC-ISIB> 	hmm...
C00314 00023	∂10 Nov 1981 1801-PST	<CSD.GREINER at SU-SCORE>	Macros, etc
C00327 00024	∂12-Nov-81  1515	Steve Klein <SKLEIN at USC-ISIB> 	oozing onwards  
C00332 00025	∂TO SKLEIN@ISIB (CC LENAT@PARC) 23:39 3-Dec
C00336 00026	∂TO SKLEIN@ISIB 12:01 22-Dec
C00340 00027	∂TO SKLEIN@ISIB 16:24 29-Dec-81
C00357 00028	∂TO SKLEIN@ISIB 13:25 8-Jan
C00373 00029	∂11-Jan-82  1745	MANN at USC-ISIB 	citing our use of RLL 
C00377 00030	∂26-Jan-82  2013	Steve Klein <SKLEIN at USC-ISIB> 	awoof 
C00378 ENDMK
C⊗;
See all RLL.BBD[rdg,dbl], 
also ARCHIVE.RLL[rdg,dbl] for backed-up information
	Messages with Steve Klein (ISI)
∂14 Oct 1980 1323-PDT	Steve Klein <SKLEIN at USC-ISIB>	Re: minor details...
To: CSD.GREINER at SU-SCORE

Hmm...replies 12 levels deep seem to lose the flavor of their contents.  wrt
manual 1 vs manual 2, we would like to attempt "hands-on" type experience--
have you set up some mechanism for this?  That is, distribution of the system
or use there or ?? (is this info included in your documentation?).  If not too
late, I'd like to request two sets of the manuals--I'm trying to shove things 
at several people...
Steve.
-------
∂14 Oct 1980 1547-PDT	CSD.GREINER	Re: minor details...
To: SKLEIN at USC-ISIB
cc: csd.greiner

RLL-1 is fairly close to being distributable.  I've not released it yet as it
is still strewn with bugs and inconsistencies.  There is also some legal hassles
to be resolved - forms to sign and the like.
In the long term, the MRS system, by Genesereth & Smith, will be the official
bona fide Representation Language Language -- Mike claims it will be available,
sans bells and whistles (i.e. lacking any useful facility) some time in the next
few weeks. RLL-1 will thenafter be encoded in this system, for compatability
and transportability.
	I'll try to get you two sets of the manuals. Ask again if you don't
get both sets.
	God bless, and too-da-loo,
Russ
-------
∂22 Oct 1980 1509-PDT	Steve Klein <SKLEIN at USC-ISIB>	I see a ship on the horizon...
To: CSD⊗.Greiner at SU-SCORE

Hi.  Do you know which address got used for mailing the memos out?  Nothing
seems to have shown up here yet.
Steve.
-------
∂23 Oct 1980 2030-PDT	CSD.GREINER	Re: I see a ship on the horizon...
To: SKLEIN at USC-ISIB, CSD⊗.Greiner
In-Reply-To: Your message of 22-Oct-80 1509-PDT

Turns out only 25 memos have been sent out so far.  The rest (including,
apparently yours) will be sent soon (after the next batch come back from the
printer...)
	Russ
-------
∂28 Oct 1980 1407-PST	Steve Klein <SKLEIN at USC-ISIB>	paper snow
To: CSD⊗.Greiner at SU-SCORE

Hi.  Sorry for the bother, but the RLL-1 paper arrived yesterday, without
the "Details..." paper.  Could this be due to paper snarl/printing details,
or am I being over-anxious?
wit regardlets,
Steve.
-------
∂TO SKLEIN@USC-ISIB 14:05 3-Nov
Tap tap tap <yawn> tap tap tap ...
Steve - have they arrived yet?  (By now they REALLY should have...)
Also, if its not too much bother, please send comments to RDG@SAIL.
Anything interesting happening there?
	Russ

∂04-Nov-80  1324	Steve Klein <SKLEIN at USC-ISIB> 	Re: Tap tap tap <yawn> tap tap tap ...   
To: RDG at SU-AI

greetzings.  I haven't seen the innards paper yet...murphy's  law or the US 
mail has achieved self-awareness and is practicing selectivity.  Everything
here is mostly mundane...I wonder what the secret is to getting more done in
less time  (if you find out, maybe we could bottle it).  If Reagan wins I might
move to New Zealand--have you considered what you will do?
A foobar cocktail in your general direction.
Steve.
-------

∂07-Nov-80  2114	Steve Klein <SKLEIN at USC-ISIB> 	pretty pictures 
To: RDG at SU-AI

Howdy...just a quick note:  I got the memos yesterday. Thankks.
Onwards.
Steve.
-------

∂05-Nov-80  1051	PRESSBURGER at SCI-ICS   
To: rdg at su-ai

Date: Tuesday, 4 November 1980  15:29-PST
From: Steve Klein <SKLEIN at USC-ISIB>
To:   PRESSBURGER at SCI-ICS
Re:   delta

How does an elephant dance?  Music experiments from the point of an
expected sound or just manipulating the equipment...tape decks and loops
are notoriously limited in flexibility...the world needs some decent
computer based composition systems...sounds like a reasonable life/business/
phd thesis.  The notion of "knowing" what defines a proof, what a proof
entails, and the underlying knowledge that supports the notion of proof
seems one of the hairier issues I've seen in a while, although I seem to
recall that a major part of (some) philosophical garbage deals with this
in a very ad hoc manner...I haven't read any of Lenats new stuff, so can't
comment on its limitations.   Did you see any of the interviews with
"people on the street" last night?  Goddamn parrots...is everyone in the
world so stupid that they believe the stuff they see on TV?  If I hear one
more person say that "its time for a change" I'll amputate them at the knee.
I hope you kept your senses and didn't vote for Anderson.  The "video
revolution"  hopefully is the start of the downfall of our current way of
voting...when anyone can watch what goes on in congress there isn't as much
that you can get away with...not an exclusive club anymore.  Voting as
it now stands (pick one of 2/3/...) bears the same relation to expressing 
your opinion as X'ing a contract does to understanding it...ten years from
now we may see something different...unfortunately, the media stranglehold
may be even worse--the only bright spot is that current trends are away 
from centralized control.

There are some great cassette decks available for cheap now.  I bought my
parents a Technics one with solenoid controls, fluorescent peakreading meters,
less wow&flutter than my old Sony, metal tape capability, etc. for $260.
There are an amazing number of decks for $150-300 that are great (need to
use metal tape though to get around lower speed...not very cheap, although
compatible with reel-to-reel tape costs).  Sendust heads are reasonable, as
are ferrite...don't know that anyone has really pointed out real differences
in end recording quality...just have to stay away from normal permalloy heads.
45 minutes per side is still a problem, but I'd rather flip cassettes at that
rate than reels at ANY other rate.
Barry actually found that "treasure"--a copper plate under the Colorado St.
Bridge...got $100. from the place having the contest...really stupid set
of clues from an overall point of view (the idiot also made several mistakes).
Sandy is looking in earnest for a place to go back to school...police dept
really getting to her, however, I'm most likely going to stay around here for
the next year or two...interesting contest between too many options and not
wanting to do anything.   
Looks like both goodies I'm working on here may potentially end up in RLL/MRS.
Our hardware representation stuff is evolving into general VLSI design (I
think I mentioned that at some point previously)...most of the mechanisms
needed to do this are also common to all engineering design projects--
interesting to see what generalities could result...as I think I also mentioned
previously, one part of this looks just like a part of an automated
programming system or heuristic-based compiler...I'd like to get your 
opinions at some point on how you think the world should be organized.
The other stuff will probably be my masters thesis...a computational
framework for systemic grammars (the linguistic underpinnings of SHRDLU,
among other things, if you haven't seen anything on them). For the 
multi-paragraph English text generation stuff. End result will hopefully 
be nicely enough done that it can be turned on anything in the RLL system
(with appropriate concept-to-English expression mappings). Such grandiose
plans, sigh.
Steve.

∂Mailed to SKLEIN at USC-ISIB  18:13 9-March
... and you were about to give up ...
Steve -
Rejoice, rejoice, rejoice!  The MRS manual has gone to press, errors and
all.  All 35 pages will be mailed to you when it becomes available.

If you like I'll carry a copy thence 18-March.
I've a now-more-official-than-last-time-invitation to arrange to consult
at Rand, scheduled for 19-20 March.  Would you like to get together sometime
around then?

Russ

∂09-Mar-81  1822	Steve Klein <SKLEIN at USC-ISIB> 	Re: ... and you were about to give up ...     

Truly amazing...if you brought down a copy I wouldn't complain.  Doing 
something/whatever sounds reasonable if it doesn't conflict with your (any)
plans.  I don't think I have any problems in that respect.  I'll check and
get back to you.
Steve.
-------

∂30-Mar-81  1831	Steve Klein <SKLEIN at USC-ISIB> 	..oops..   
To: RDG at SU-AI

I seem to have misplaced the fact that you were coming this-a-way.  Oh, well...
how was you trip/consulting experience (assuming it occured)?  What's new
up your way...anyone you know poke holes in our "illustrious leader"? 
Steve.
-------

∂Mailed to SKEIN@USC-ISIB  14:30 31-Mar
Yak, Yak, Yak
The trip was good, if tiring.
The stuff at Rand looks financially rewarding, but not (yet) intellectually
stimulating.  I saw Fay and Bonnie whilst there, as well as 4/5 of my nuclear
family (yawn).

So how's by you?  You'll be overjoyed to know that at this very moment
(yes, right now!) your personal (almost autographed) 
copy of the MRS manual is meandering its way to your clutches --
really!
I was waiting for Mike to mail you a copy; and he assumed I was playing
postman.  Anyway, enjoy. (It's not all that interesting, but you'll find
that out soon enough...)
	Russ
	(klein, con't)
∂06-Apr-81  1612	Steve Klein <SKLEIN at USC-ISIB> 	Re: Yak, Yak, Yak    

<<<< ∂Mailed to Steve (CC Mike)  11:14 8-Apr >>>>
Answers, such as they are
Hi.  Sorry about the delay.  I got the paper the day after your message.
Thanks.  It is rather sparse stuff.  Have any of you written down a "game plan"
of any sorts?  The following (for example) are of most interest:

*****
Game plan:  Mike has a vast list of things he hopes MRS will be able to do,
one day.  Included are such diverse elements as {fear, surprise, ruthless
efficient and an...} preservations of invariants, proliferation of demons,
graceful agenda-driven process-interruption and -resumption, ...  Ask him
for the full list. (He, of course, wouldn't give it to you, but you can
at least annoy him with another reasonable request...)
*****


  > The relation between RLL and MRS, both short and long term

*****
RLL vs MRS:  Currently these are two distinct systems, each sitting on the
same CORLL foundation.  That's the way tey'll stay in the short term; eventually
I/we hope to find some slave labor to incorporate RLL into MRS, by making
an RLL-initializing module, which can be plugged into MRS's core.  (Volunteers?..)

For what it's worth, some Xerox people (led by your hero and mine, Mark Stefik
[isn't it annoying how many mono-syllabic, quadra-epistle male moniker there
are -- and they (we?) all seem working on this silly set of projects. Any, back
to the plot:]) began with MRS, but grew dissatisfied; with its code itself,
as best I can tell.  So begot LRS (for Little Representation System; cutely
sandwiched between Krs and Mrs, alphabetically.)  And so much for our maxim,
of halting the proliferation of similar but incompatible ...
*****

  > RLL/MRS's place in the structure of things at Stanford (support, interest,
       again long term expectations)

*****
Place in the sun: as long as either Lenat (hereafter DBL) or I am around there
will probably be continued interest in RLL;
ditto for MRG (an alias of Mike Genesereth) with respect to MRS.
As MRG has suckered slews of naive personel into using MRS, it will probably
even be supported for a while, whatever that means.  The Rand stuff will
keep me honest, wrt RLL.
DBL is currently EURISKOing in virgin LISP, by the way.  Eventually he hopes
to do the stuff in RLL, but thus far has found its time requirements too
stringent...
*****

  > Status of RLL examples (Hearsay-type, KLONE, etc.)--someone doing 
     something, waiting for volunteers, etc.

*****
<This answer is as sparse as the work done, except for meta-comments,
(and, of course, that last Meta-Meta-Comment [whoops, and that last
Meta-Meta-Meta-Comment {not to mention the preceding ....}]).>

I left the above part in to be cute - but actually I have found the need to
build up features of the Units package -- esp its inheritance (SPECS) relation,
of gradual refinement.
*****

  > Any urges to build general "real-world" type knowledge bases/rep-
     resentations (time {gak}, spatial location, events, general taxonomies)

*****
In EURISKO's eventualities, (or at least in DBL's conception of it,)
vast amounts of common sense will be available to this over system;
and this body of facts, heuristics, ... will grow daily, due to both 
input from various users, and EURISKO's introspective capabilities.

A paper I started to write an IJCAI paper a while back,
"spontaneously aborted" itself when it became apparent the poor
thing lacked anything which did more than resemble semantic content.
Its intent was to discuss EURISKO itself, and these issues, perhaps.
Anyway DBL and I may one day massage it into a reasonable shape.
If so I'll be able to suitable answer that question with a pointer to that
piece of paper.
*****

  > Mailing list / users group status

*****
I'm not sure what you want here.  Yes, there is a degenerate mailing list,
consisting of people I feel should get this sort of stuff, including you,
Tom, and Rick H-R.  Nobody from outside has contributed, yet.
*****

If you guys haven't formulated such "positions" yet, feel free to ignore.
We are finally getting down to a particular representation for the knowledge
delivery / text generation project (generally KLONE-like) and it would be
truly wasteful to generate another hack system (especially when a specific
goal is exportability).  Enjoy.
Steve.
-------

	(klein, con't)
∂21-Apr-81  1732	Steve Klein <SKLEIN at USC-ISIB> 	Sunshine and Light   
To: RDG at SU-AI

Somehow, MM asking (demanding) that I title everything is ridiculous (hmm...
I've never seen whether the Subject field goes away if blank...probably not).
Anywho, in the process of "selling" RLL to the powers-that-be the need that
emerges is for more toys to show.  What could I actually get my hands on
(*.exe, KB's, other unit descriptions, demos, random prose, ...), with what
restrictions?  We have an immediate need for something which shows handling of
events and event sequences (presumably the chemical spill type goodies, if
they still exist).  The gospel seems to be potent...no one has complained yet.
Have you written your anti-reagan letter for the day?
Steve.
-------

 ∂Mailed to SKLEIN  16:02 22-Apr
Thunderclods and Darkness
Hmm - to answer the easy question: yes, MM does NOT force you to en-subject
your messages.  Now for the hard stuff:

I'm elated the "word according to the prophet Steve" is so catchy.
I'm not quite sure how to go from here; what would best further RLL's cause.
The code still has bugs in it -- so what else is new?  
Its external appearance hasn't changed much
over the last n months -- unless you pull out your stop watch and observe
it cruising along at many times the speed it once had.
(That is, the amount of speed has increased; not the time spent for
a given task.)

My next step will further speed up the system -- making several functions
(like GetValue) macros; so the compiled code will be able to avoid dozens
of costly queries.
After that I'll code up a Units-like SPEC relation (gradual refinement),
which seems essential for a wide variety of tasks.  (Not only for the
SPILL stuff, but also for Rand's planner system; and from your description,
for your stuff as well.)

Let me ask this: does ISI have some (competent) manpower (well, person power)
which could be contributed towards the greater good of ...
There are a host of simple-ish chores which just take someone to sit
down and do it; and I've been unable to get any of the BS or MS students
sent my way up to speed.  Hence RLL's incompleteness.
And hence my reluctance to send a flawed copy ISI-bound.

Let me know.  Any messages for these parts -- eg to Tom, or ? ?
Did you know that Jon Nimitz is in India now?  
And what's this anti-Raygun stuff?  I mean, really, he's our president!
Mr Yankee-Doodle himself!  (Forgive me, I have to get in the spirit.
Rand's putting thru a security clearance on me now.)
Mom and Apple Pie!  My country 'tis of thee..

Russ

∂22-Apr-81  1701	Steve Klein <SKLEIN at USC-ISIB> 	Re: Thunderclods and Darkness       

Thunderclods only happen after bombing runs (to not witness would I like).
What is Nimitz doing in India?  Say hi to the world up there where appropriate
(when in doubt laze [for to refer to the instances of being lazy]).  Ignoring
your seekurity clearance aspirations for the moment (if they come by here will
I have stories to tell [rasp, rasp {as in the sound of dry hands colliding
torsion-wise}]) for what is a president except possibly someone to throw
mud-pies at?  Unfortunately, our cheap executive seems intent on not honoring
that tradition of silent clodhood, but insists on being a vocal clod (isn't
that poetic?).  By even suggesting otherwise (this is for rhetorical effect)
you are supporting the infidels (incidents of complaints concerning book
contents [censorship-wise] are up five-fold since January...).

Current status of things here (RLL) is that superiors consider it a good
tool from which to learn how to design OUR representations (aaaaargh!!!!).
The battle being fought is one of convincing that much time would be saved
by USING it in our plans rather than treating it as a model.  If that could
be accomplished, the three-to-five of us would (presumably) put time into
upgrading/fixing things as well as developing our own extensions (or trash,
depending on how things go...).  Consequently, the need is for AMMO to point
out that starting from scratch is a waste of time.   Anything I get from
you now need have no guaranteed status, but the directions in which things
have been extended (actions, control, "world"-knowledge) are important.
It's basically a selling situation with the other details to come later...
Steve.
-------

∂Mailed to SLKLEIN@ISIB 16:03 24-Apr
Answers, maybe...
Nimitz: Story, according to Bonnie, is: some broad juilted(sp) him, so
its off to the peace core (for want of a nearer French Foreign Legion).
SC: Nah, THEY wouldn't trouble you. Tom's on their list, but ...
RLL, and friends:  Well, the fact of the matter is RLL 'tain't yet
releasable; and even when it is I've got no real yen to maintain it.

In terms of Ammo (I kept trying to figure out what it was an acronym for...)
well, RLL does do Slots real good.  And soon will do general functions
as nicely.  What sort of demo would you like?
Would verbal contact be better than written?

Have you seriously considered MRS as a nucleus?  Why or why not?

	Russ

 ∂24-Apr-81  1631	Steve Klein <SKLEIN at USC-ISIB> 	Re: Answers, maybe...     

A nice subject title...if you make them general enough they are reusable
without indirection.

Our current view of "our" representation is based somewhat on KLONE...
intensional concepts vs. extensional individuals, roles with specifications
(for each role instance) of cardinality & value restrictions, one or more
inheritance mechanisms, etc., etc.....  It seems closer to the base state
of RLL than MRS.  If you don't see this as true, feel free to enlighten me.

Steve.
  
(Maintenance only exists if the assumption is that something is being
maintained)

-------

 ∂Mailed to SKLEIN  16:49 24-Apr
Idea:
Why don't you make up a list of things you want to represent, as well
as the sorts of inferencing/retrieval algorithm you need.
Send these (your tired, your huddled, your yearning masses ...
oops - you mean you're not from the security office? Never mind.)
over, and I'll try to cons up a RLL-ish encoding.  (I did this for
a set of some 20+ "facts" after the Expert Systems conference, which
I could mail you -- or have I done that already?)
The powers that be can likewise draw up their idealized KL1ish representations;
and then compare the results.

By the way, I do think your assessment of MRS is apt: it ain't got as many
goodies as RLL's got.  This is true both when comparing base states,
and sum total of available (respective) systems.

If you were to get RLL, how would I communicate fixes/updates/improvements
to you; and vice versa?  This is what I meant by maintenance.

	Ta-taa
Russ
!∂24-Apr-81  2329	Steve Klein <SKLEIN at USC-ISIB> 	Re: Idea:       

I haven't seen the results of the Expert Systems conf...i'll read anything
(once).  The powers-that-be are laboring under the viewpoint that there is
nothing wrong with casting things in concrete as long as you have a vague
idea of what you want.  I'm arguing towards ABSOLUTE (nice to be firm)
generality since we need to represent such things as events & event sequences,
times & time intervals, hypothetical circumstances, not to mention several
funny control regimes (assuming everything fits together) and who knows what
else...

I could (and will) send you a sample of the "hand-waving" level of stuff we
now have, along with the pseudo-strange properties it has.  If I can be
convincing to everyone else at this level then it doesn't matter that any
future flexibility is achieved (that comes for free).  People here are
not sure that the RLL approach to things buys them anything ("excess
generality...we don't need any of that..." type comments).

wrt maintenance, that is a standard hairy area & depends upon whether such
goodies are flowing both directions or not.  At an initial level, there
presumably need be no effort on the part of you people beyond answering
questions (our responsibility to snarf most-recent versions, keep our changes
modular, etc.).  The first problem occurs if we do "contract" debugging (ala
your previous msg) and you would like to get the fixes back.  The final level
of involvement would try to integrate what we do with what you do which could
conceivably be worse than the interaction problems the KRL-types mentioned
(since here we are talking about two totally independent systems).  I don't
know what your thoughts are on reasonable levels of interaction and benefit to
your goals up there.  I don't suppose our munging on your machine would be
politically feasible...

Steve.
-------

Mailed p11 of REPORT[rdg,dbl] to SKLEIN 12:50 25-Apr-81
!∂29-Apr-81  1042	Steve Klein <SKLEIN at USC-ISIB> 	for to collect facts...   
Date: 29 Apr 1981 1042-PDT
From: Steve Klein <SKLEIN at USC-ISIB>
Subject: for to collect facts...
To: RDG at SU-AI

greets...may your happinesses be daylike, etc...
briefly, how much room is there in the units address space (pages,
max unit limit, whatever) plus how much of interlisps basic address space
is unallocated in a vanilla rll?  the question came up and i had not the
slightest idea...
steve.
-------

 ∂Mailed to SKLEIN 13:11 29-Apr
...stcaf tcelloc ot rof
That's the advantage of CORLL - you can have as many units as you want.
They get swapped in as needed, and swapped out as "core" space demands.

How much space is in "core" initially depends on the version of LISP.
On the Diraldo, who know? and who cares?  It's way more than I'll need.
There seems to be less space on SCORE's InterLISP than on Rand-Ai's --
which indicates the disparity amoungst InterLisp implementations.
(IE I can only deduce the two versions start out with different amounts 
of unallocated pages.)

The additional "source code" needed to run RLL (beyond CORLL)
is rather distributed:
There are two compiled files - containing general utility stuff
and RLL specific stuff -- of sizes 56 and 38 disk pages, respectively.
The rest is buried in amongst the units.

That answer your question?
	Russ
!∂29-Apr-81  2241	Steve Klein <SKLEIN at USC-ISIB> 	Re: ...stcaf tcelloc ot rof    

actually...no.  "as many units as you want" is a rather large claim (you 
might gather from this that i haven't seen the CORLL manual yet).  i bet
you can't make 10 million units, if for no other reason then you can't
have that many pointers in general...do you have a number (1k, 10k, ?)?

the other question is a direct one of if you do a STORAGE] how many free
pages there are, plus roughly how much disappears for each unit (unless
the unit index is paged too)...this all from the tops-20 interlisp point
of view.

Steve
-------

 ∂Mailed to KLEIN, (CC DE2)  11:17 30-Apr
Partial spec
Limitations will probably be Atom Name size -- as that will probably be
exhausted before the available disk storage is.  (CORLL allows units to
be stored on such "peripheral storage" place, rather than "in core".)

Anyway, I now have about a thousand units in use; and have had no problem.
Next time I start up RLL I'll execute the (STORAGE) command.

Russ
!∂30-Apr-81  1734	Steve Klein <SKLEIN at USC-ISIB> 	what za chanze? 
Date: 30 Apr 1981 1734-PDT
From: Steve Klein <SKLEIN at USC-ISIB>
Subject: what za chanze?
To: RDG at SU-AI

What is the chance (he asks nicely) that you could find a copy of the CORLL
manual to zing down this-a-way (or a pointer if online there)?  I be much in
your debt given the publication dept's record of achievement...
Steve.

Support National Security (pause) take an MX missile to dinner.
-------

 ∂Mailed to SKLEIN 15:45 1-May
(Whoooosh)
It's on its way.  To answer your question, there is an excellent
chance of finding that manual ...
!∂12-May-81  1556	Steve Klein <SKLEIN at USC-ISIB> 	regrets or whatever  
Date: 12 May 1981 1520-PDT
From: Steve Klein <SKLEIN at USC-ISIB>
Subject: regrets or whatever
To: RDG at SU-AI

Hi.  Got your note (thanks for paper)...sorry I didn't call but Sandy's father
has been in for repairs so things have been a bit unusual...  Talk at you 
later.
Steve.
-------

 ∂Mailed to SKLEIN 11:46 15-May
Whatever, with or without regrets
No problem - as usual I was overly busy as well.  (Among other events
I saw "I Got my act together and am taking it on the road" in Hollywood,
with Bonnie.  It wasn't bad; but definately not worth the $. End review.)

Anyway, yes I got that challenge of things to represent; but have not had
the time to sit down and address it.  I hope to get to it by next week.

Anything else happening in parts south?  Hope Sandy's father's problems weren't
too severe; and that he's better...

Russ

 ∂15-May-81  1311	Steve Klein <SKLEIN at USC-ISIB> 	Re: Whatever, with or without regrets    

Only the normal wrinkles happening...what to do with my life, etc.  Any idea 
what you are going to do when you finish your degree?  Founding small companies
seems interesting but so does working for other people if interesting and pays
well (concession to real world...).  I think Barry and I are going to try
creating something to sell to see how that works...nearly everybody in the
Caltech CS dept is running around pursuing "outside interests".

Sandy's father had a lung tumor (benign) that they hacked out (take heed 
smokers of the world...your time will come) but he seems to be coming along
fine.

About time to discover the next place to live (they're selling this one out
from under us)...I hate it...

Steve.
-------

	(klein, con't)
∂01-May-81  1745	Steve Klein <SKLEIN at USC-ISIB> 	A Test of Wizardry   

Well...you asked for it...a piece of representation to (potentially) be
encoded in RLL.  I hope this isn't too large.  Let me know if you find
anything obstructionist or ambiguous.

Have you read any of Levesque's stuff and what you think?  The article I've
seen is the one in Findler's Associative Networks book.

Steve.

-----------------------------------------------
Preconditions:

  Our general context is the task of text production. The following is meant 
as (part of) a representation of the following sentence:
  
  "Jane Doe has cancelled her appointment with us on Wednesday morning."

Conventions:

Things in ALL←CAPITALS are Generic or Individual Concept Names.
 Generic Concepts can have subclasses (specified by the SuperC notation).
 Generic Concepts can be individuated (specified by the Isa notation).
 Individual Concepts represent extensional instances and cannot be
   subclassified or individuated.
 Concepts can have multiple "parent" concepts.
Things below concepts are Role Specifications, which consist of
   a Role Name plus {(Restrictions)} plus a {Role Filler}        {} => optional

Concept Names     =>  strictly handles
Role Names        =>  again handles, but inheritable and (perhaps) renamable
                         (see the VISIT concept below for a rename instance)
Cardinality       =>  single value or <NUMERIC> range of the 
                         <NUMBER OF> role filler(s).
                         (also, we have been encoding optionality vs.
                          necessity as a lower  bound  of  0  or  non-0.
                          It is separable, but must be encoded somehow.)
ValueRestriction  =>  concept which the role filler must be eq to or 
                          descended from.
Role Filler       =>  some concept or set of concepts meeting the applicable 
                          restrictions.

Role specifications are inherited by subconcepts of this concept and their
  individuals, ad nauseum, with (some) deepest value taking precedence in 
  cases of conflict.  The deeper specifications must be more restrictive than
  their shallower (higher, more generic) ones.


***Generic Concepts***

OBLIGATION SuperC ("SomethingOrOther")
  Performer (Cardinality 1:n, ValueRestriction AGENCY)
  Beneficiary (Cardinality 1:n, ValueRestriction AGENCY)
  Event (Cardinality 1, ValueRestriction ACTION)

APPOINTMENT SuperC (OBLIGATION)
  Event (Cardinality 1, ValueRestriction VISIT)

ACTION SuperC ("SomethingOrOther")
  Time (Cardinality 1, ValueRestriction TIME←INTERVAL)
  Actor (Cardinality 1:n, ValueRestriction AGENCY)

VISIT SuperC (ACTION)
  Visitee (Cardinality 1, ValueRestriction LOCABLE←OBJECT)
  Visitor (= Actor)

TIME←INTERVAL SuperC ("SomethingOrOther")                       |
  BeginTime (Cardinality 1, ValueRestriction TIME←MOMENT)       |  lotsa fur.
  EndTime (Cardinality 1, ValueRestriction TIME←MOMENT)         | 

PERSON SuperC (AGENCY)
  Sex (Cardinality 1, ValueRestriction SEX)

SEX SuperC ("SomethingOrOther")
  

***Individual Concepts***

APPOINTMENT#1 Isa (APPOINTMENT)
  Performer JANE←DOE#1
  Beneficiary ISI
  Event EVENT#1

VISIT#1 Isa (VISIT)
  Time WEDNESDAY←MORNING#1
  Actor JANE←DOE#1

WEDNESDAY←MORNING#1 Isa (TIME←INTERVAL)

JANE←DOE#1 Isa (PERSON)
  Sex FEMALE

FEMALE Isa (SEX)

MALE Isa (SEX)

ISI Isa (AGENCY)

-----------------------------------------------------------

Unanswered questions:

The above is a single hierarchy...will this suffice 

Where to place inter-role constraints.

What to do with hypotheticality  (VISIT#1  above  should  be  a
hypothetical visit <IN THE TIME←INTERVAL "FUTURE">)

Is something lost by role names having  significance  only  for
inheritance

How to support  manipulating  times,  events,  objects  without
diverse hairy access methods

THE REPRESENTATION HAS TO PROVIDE FOR SEVERAL SETS  OF  STATUS
MARKS ON THE WHOLE COLLECTION.  ALL OF THESE KINDS ARE FOUND ON
BOTH CONCEPTS AND ROLES.

 .  ONE  SET  REPRESENTS  READER'S KNOWLEDGE OF EXISTENCE:  IT
    CHANGES INFREQUENTLY AND IS BACKWARDS INHERITED.

 .  ONE  SET REPRESENTS READER'S CURRENT ATTENTION.  IT IS NOT
    INHERITED.

 .  ONE  SET  REPRESENTS  WHAT HAS ALREADY BEEN CONVERTED INTO
    TEXT BY THE SYSTEM.  IT IS NOT INHERITED.>

-------

 ∂To SKLEIN@ISIB (18:11 20-May)
At long last, the ANSWERS!!!  (well, more or less...)
First, my standard meta-comment (I know, I know: that last statement, my
first "real" statement, was really meta-meta-.  Anyway,) Rumor has it that
Levesque is heading for Fairchild here in PA, to join Ron Brachman.

Anyway, the above looks amazingly KL-ONEish; and none of it seems even
difficult.  The fact that RLL's document implies a disdain for SuperC type
of operators doesn't mean that users can't simply use the existing
SuperSet slot to provide that function.  Simply indicating that the
various slots you want inherited are inheritable/specializable seems to
address the final issue.  (IE the mechanism for value restriction is all
set up.)  Basically the only major change you'd have to made would be
lexical; and using Typicalx to store the defaulted values, over Anyx.
(That is, if you wanted to use RLL as it stands now.  Of course you would
be amply welcome to modify (your copy of) the units to correspond to
precisely what you wanted.

Things like storing the cardinality of a "slot" is easy to do in RLL -- it
is stored on the unit which representing that slot (as part of the range
specification).  In fact, it can be automatically deduced from the
definition of the slot, in many cases.  One more plug -- RLL currently
"knows" about sets, lists and bags (as well as singletons), and permits
you to declare the value of a slot to be any of these data-structures.
Then, when you add on new values, RLL determines, for example, whether the
order of this new insertion makes any difference, or if duplicated entries
are permissible.  One may also use the FListN data-structure to specify
the value of some slot to be a list of elements of (possibly) different
types -- eg (FListN UnitType NumberType (FSet BooleanType)) means the
legal values for this slot will be lists of three elements -- where the
first is a unit, the second a number, and the third is a list of booleans.
(The knowledge the knowledge about the datatypes is, of course, stored in
UnitType, NumberType and BooleanType.  Let me know if you want more
details about the how this knowledge is stored, or used.  Or more about
the way RangeTypes are used...  Note finally that this same formalism is
being used to describe arbitrary functions -- not just slots...)

There are many ways of referring to a collection of units.  One is to
regard them all as members of class in your hierarchy.  (As any unit can
have many parents it may, therefore, belong to several groups -- eg
Reader's Current Attention, as well as its current position in the
organization of the world.)

For this particular example I would not advice that method.  First, what
that set of entities have in common is really a meta-relation -- ie its
not John in the Reader's current attention, but the John unit ...
(Assuming I understood your example.)  Anyway, there is nothing which
prevents you from defining a RCA units, and a CollectionOfUnits slots,
such that the value of RCA:CollectionOfUnits is just that set of units.

------ As I didn't get a sense of what, exactly, I was supposed to answer,
the above ramblings were just things your example above triggered; and,
undoubtedly didn't answer the questions you had.  Do feel free to ask
again, and to constrain my meandering by including more precise inquiries.

Nothing new to report from PA.  And there?

Russ
!∂TO SKLEIN@USC-ISIB 16:43 22-June
Answers! (And if you believe that, do I have a bridge for you...)
*-*-* [Step 1: Observe funny squiggles on flush against left margin.  Icky, huh?
*-*-*  Unfortunately, these are the particular characters I ended up choosing
*-*-*  for prefacing my remarks.  They are now littered perfusing about the
*-*-*  now messy remnants of your last message.  Enjoy, as best you can...]

 ∂17-Jun-81  1639	Steve Klein <SKLEIN at USC-ISIB> 	Re: At long last, the ANSWERS!!!  (well, more or less...)    

Hi...got tangled in another part of our project, hence the delay.  Anything
new in sight there?  Anyways, response to your response.

First, the cardinality of a slot is not the cardinality of a GENERIC slot, but
merely the particular instance associated with this unit/concept.  What
this seems to imply is doing something like creating a unit for each instance
of a slot and putting the cardinality/range&type checking stuff there.
	*-*-* Yes, this is the sort of thing Doug has been talking about for
	*-*-* a while.  It is currently not implemented, as I never found a
	*-*-* need for this facility.  (This might be because I never understood
	*-*-* it...) 
	*-*-* To make sure I understood your example -- do you mean every thing
	*-*-* which IsA Obligation, has a performer; and, in fact, it has
	*-*-* an nonNIL set of Performers?
	*-*-* Should I assume the value of a unit's Performers, for general units, 
	*-*-* does not have this restriction?

	*-*-* Anyway, in every case I dealt with, the
	*-*-* cardinality of a slot was invariant... those times I needed
	*-*-* to store similar sorts of things with variable formats, I
	*-*-* realized I was really talking about two types of things, and
	*-*-* as such, they were deserving of distinct slot-names.
	*-*-* This was an epistemological distinction, not linguistic ---
	*-*-* you certainly may want to use the same NAME for these entities,
	*-*-* and trust the system to disambiguate the slot name into the
	*-*-* obvious form.
	*-*-* For example, declare Performer to be 
	*-*-*	(OneOf ObligationPerformer CircusPerformer),
	*-*-* where both ObligationPerformer and CircusPerformer are predefined
	*-*-* slots, doing the right things.  [In particular, the value of
	*-*-* MakeSenseFor(ObligationPerformer) must include TypicalObligation,
	*-*-* and MakeSenseFor(CircusPerformer) must include TypicalCircus.]
	*-*-* Then the value of Performer(UnitX) will be either 
	*-*-* ObligationPerformer(UnitX), if UnitX:Isa includes AnyObligation, or
	*-*-* CircusPerformer(UnitX), if UnitX:Isa includes AnyCircus.

	*-*-* Notice these two subslots of Performer could be totally different;
	*-*-* or their only difference may be in their respective formats.
	*-*-* (Permitting the value of ObligationPerformer to be a set,
	*-*-* while the value of CircusPerformer could be a single atom...)

Ex:  Concept Obligation ==> Unit AnyObligation w/ 
                               Performer = (*Do* FSeeUnit ObligationPerformer)

                  and       Unit ObligationPerformer w/
                               Format = NonEmptySet
			       SuperClass = Performer
	*-*-* SuperClass is inappropriate here -- ObligationPerformer, as I
	*-*-* understand your example, is NOT a set, but a further specification
	*-*-* of a slot.  Perhaps you meant "SuperSlot = (Performer)", or
	*-*-* maybe "UnitRangeType = AnyPerformer" [<- ie the range of this
	*-*-* slot is (FNonEmptySet (UnitType (*P AnyPerformer)))]
			         etc.

Questions are:   does something like this work?
	*-*-* Yep, the subslot mechanism, and associated OneOf slot combiner,
	*-*-* are now in RLL. 
		 is there a better way?
	*-*-* Yes, there is a slightly more natural mechanism (one with less
	*-*-* "bulky" and artificial units) 
	*-*-* for achieving this same results --
	*-*-* One simply indicates the ToCompute of Performer is FindDefault,
	*-*-* and stores a value of the form (*Do* FExecute (LAMBDA (un) ...)
	*-*-* on each TypicalX:Performer which might be queried.
	*-*-* I did not mention this above because there are still many details
	*-*-* involved that have not been hammered out.
		 the level of indirection is somewhat disturbing...
	*-*-* Why so unsettling?   These "subslots" do refer to different things,
	*-*-* this formalisms forces you, the creator, to acknowledge this.
	*-*-* Of course the casual user need never know about this -- and, in
	*-*-* fact, he never has to use these subslots,
	*-*-* thanks to that disambiguating facet of RLL's "mini-front end".

Next...could you discourse on inter-slot constraints?  Have you built
mechanisms for either enforcing consistency between slot values or signalling
when inconsistencies exist and how do you represent such stuff...note again
that this applies at the instance level (hence doesn't seem to directly
match your type-checking mechanism)
	*-*-* At the "generic slot" level, we have just what you need.
	*-*-* As you can define the ToPutValue function for any slot,
	*-*-* you could incorporate, by hand, any check you think is
	*-*-* necessary.  Of course, RLL's default mechanism already
	*-*-* does a whole lot of these -- basically by replacing "faulty"
	*-*-* values with correct ones. [Sketch: Storing V on U:S will cause
	*-*-* (i) U to be added to V:S-1, if S-1 = inverse of S exists; and
	*-*-* (ii) various W:T's will be "invalidated", where the T slot
	*-*-* was built using S.  I might mention the PutValue call will return
	*-*-* an error condition (here, by returning NIL) if V does not satisfy
	*-*-* S's domaintype predicate. [What really happens is a bit more
	*-*-* complicated, of course.]]
	*-*-*	Anyway, it would not be hard to add in another set of things
	*-*-* to do when a new value is PUT.  As before, I have simply not needed
	*-*-* this particular bell/whistle, to explain why this functionality
	*-*-* is not present.
	*-*-* If you give me a particular case, I can try to either show
	*-*-* how RLL already does this; or concoct up a new, hopefully general,
	*-*-* mechanism, for achieving that effect.

	*-*-* I still haven't said anything about handling this at the instance
	*-*-* level.  The subslot solution is probably still the "right" way
	*-*-* to go.  Let me know if you think otherwise.

	*-*-* In terms of "represent(ing) such stuff": well, much of what is
	*-*-* now done is rather declaritively encoded -- using things like
	*-*-* CVsUsedBy and Inverse slots of the units which repesent the slots.
	*-*-* (These brief values "expand" into the code which actually does the
	*-*-* corpus of work suggested above.)
	*-*-* Any other such tests/conditions/constraints you may wish should
	*-*-* be similarly encoded.

Also, how are multiple inheritance mechanisms handled?  your note seems a
bit sparse in what is actually happening internally to support this.
	*-*-* "Inheritance is a many splendored thing."  
	*-*-* This question probably
	*-*-* stems from the different senses of the term we are using.
	*-*-* To me, for that report, inheritance mechanisms were used for
	*-*-* initializing a new unit.  (One of my current tasks is to use
	*-*-* some inheritance-like thing in a slightly different sense:
	*-*-* to, for example, incrementally specialize a succession of units,
	*-*-* ala UNITs.)

	*-*-* Anyway, the three current mechanism correspond to:
	*-*-* Isa Inheritance:  used to create a new Fido, by telling the
	*-*-*	"procedure" that this new entity Isa AnyDog -- or even that
	*-*-*	Fido Isa (AnyDog AnyMotleyCreature).
	*-*-* SubClass Inheritace: Getting the AnyPoodle class, from AnyDog --
	*-*-*	or having AnyWhiteElephant:SuperClass = (AnyAlbino AnyElephant).
	*-*-* TypicalExample Inheritance: Initializing TypicalDog from AnyDog.

	*-*-* These three are just independent things -- and, in some sense,
	*-*-* they in no way interfer with each other.

	*-*-* Or did your question mean to ask:
	*-*-* To what value will Fido:Color be initialized,
	*-*-* given that Fido is being created as an Albino Dog?
	*-*-* And explain that procedure.

	*-*-* (I was afraid of that affirmation.) Ok - honesty:  This don't
	*-*-* work right.  Currently the implementation is far too simple: it 
	*-*-* will declare Fido to be either the default color for (Typical)Dog,
	*-*-* or the default color for (Typical)Albino, whichever it finds
	*-*-* first.  If anyone pressures me into it, this algorithm could be
	*-*-* updated to do some more-nearly-correct type of thing - like check
	*-*-* first to see if some characteristic is definitional, and use that
	*-*-* before considering any merely assertional fact.  Or using some
	*-*-* general ordering of property "epistatus" types
	*-*-* - from Defination, Derived, Asserted, ... thru 
	*-*-* Defaulted, and OnlyIfReallyDesperateForAValue-ed.
	*-*-* I delayed implementing this until I figured the "right" way to
	*-*-* store such epistemological marks on the propoerty; something still
	*-*-* on my agenda.  (Another less declarative, but more versatile, tack
	*-*-* involves storing procedural rules with the ToInitializeValue of
	*-*-* slot (eg Color), as well as with each TypicalX:Color.  Then some
	*-*-* general rule interpreter would walk thru these to determine the
	*-*-* initial value.  But I didn't do that, either.

--this all looks KL-ONEish as a result of it being derived from it
(abstracted?).  Onwards...(scritch, squeal..)

Steve.
-------

*-*-* Anyway, these "answers" were written (probably too) quickly; and may
not have adequately addressed your inquiries.  Feel free to write for
further elaboration, if you wish.

*-*-* I forwarded your "let's get together" suggestion to Doug, who may or may
not respond in the near future.  He's been busily EURISKOing the last few weeks,
over at Xerox.  He's shifted his attention away from RLLish issues sufficiently
long ago that he may not have terribly much to say.  But we'll see.
Mike Genesereth would be a good person to join in the discussion, but unfortunately
this meeting will not be in upper Altantic Ocean; and Mike will be, by then.

*-*-* Anyway, I'm game to your strange request to enter a higher bandwidth
communcation -- even though I'm convinced that whole idea of Talking will NEVER
catch on...
I'll let you know when, when I know.

Caio,
	Russ

	(klein, con't)
∂22-Jun-81  1416	Steve Klein <SKLEIN at USC-ISIB> 	RLL demo...perhaps   

Greets.  We will be up your way for the Assoc. of Comp. Linguistics conf.
next weekend until wednesday.  Whats the possibility we could get together
with you and Doug for discussions, etc.?  If so, could you propose some times?
Meals mon-wed are open as well as sun,tues evenings.  Among things it would be
nice to discuss would be specific questions of availability & system
"lifetime" plus perhaps some demo or other.  Our complement would be somewhere
between Bill Mann and myself and the whole group of 4/5.  Let me know what you
think.
Steve.
-------

 ∂22-Jun-81  2323	CSD.LENAT at SU-SCORE 	Re: When would be good for you?      

Practically anytime is OK with me.  I think next Tuesday
may be best, as I am having a demo for a Schlum. folk then.
(Tha is the 30th I believe) -- somewhere in the lunchtime-2pm range.

Doug
-------

 ∂23-Jun-81  1304	Steve Klein <SKLEIN at USC-ISIB> 	Re: How about Tuesday, noon?   
To: RDG at SU-AI
cc: Mann at USC-ISIB

Sounds fine.  Assuming we include lunch, I'll let you dig up your favorite
PA somewhat-fastfood joint (ACL session time constraints...). Ok?
Steve.
-------

 ∂23 Jun 1981 2336-PDT	CSD.LENAT	schedule for Tues
To: csd.greiner

Looks like lunch at the faculty club at noon,
and demo at PARC at 1:30.

How many for lunch?

Doug
-------
 ∂24 Jun 1981 1723-PDT	CSD.LENAT	misc
To: csd.greiner
cc: csd.gotelli

Ok, good, Russ.  I have worked at the RLL paper a bit
and sent a draft off to Don W.; we will do more around editing time.

Lynn: please make reservations for me, for 4 peoople,
next Tuesday at noon at the Faculty club.

Doug
-------
 ∂24 Jun 1981 1248-PDT	CSD.GREINER	Re: Number for lunch
To: CSD.LENAT
cc: CSD.GREINER
In-Reply-To: Your message of 23-Jun-81 2336-PDT

For sure Steve Klein and Bill Mann (in addition to you and me). 
There are two or three other ISIers --
but that many more people would probably only slow down our discussion...
So unless you object, let's make reservations for 4.  I'll send Steve
a msg tomorrow (ie let me know by then if this is not what you want.)
	By the way, Steve and I have sending messages back and forth
since AAAI, discussing RLL.  Basically both he and his (still KL-ONEing)
group at ISI are sold on by the rll ideal, and all are toying with the
prospect of using RLL-1 itself.
	(Final note: Steve and I know each other from CalTech, years ago.)
Russ

PS Any word on the RLL document for BES?  Is it that bad?  Or are you just
waiting for the final editing session with (Rick and Don) to splice
it in?
-------

!∂24-Jun-81  1508	Steve Klein <SKLEIN at USC-ISIB> 	IJCAI 
Date: 24 Jun 1981 1457-PDT
From: Steve Klein <SKLEIN at USC-ISIB>
Subject: IJCAI
To: Pressburger at SCI-ICS, RDG at SU-AI

Anyone planning to go to IJCAI / and what means of transportation, timeframe?
Steve.
-------

 ∂To SKLEIN@ISIB, PRESSBURGER@ISIC (11:40 25-June)
Finally some easy questions to answer!
I'm flying - leaving from SF on 24/VIII (on Western #465),
and then returning on the 30th of August, (on Western #462,) maybe.
(Some friends and I might go camping the week following IJCAI.)

Et tu?

By the way, SCI has been down for about a month -- I think Tom's best
address is @ISIC.  (Is that true, Tom?)

Finally, Doug and I are all set to meet with Bill Mann and you at noon
this Tuesday -- the plan is to eat at the faculty club, on campus.
Doug has to give a demo at PARC at 1:30; but I'll be around.

Russ

 ∂TO LENAT@PARC, CSD.LENAT@SCORE  17:03 29-Jun
Meeting tomorrow
Doug -
	I'll see Steve Klein (and I assume Bill Mann as well) at the
ACL meeting tomorrow morning.
We three can meet you at the Faculty Club shortly after noon.

See you then.
	Russ

	(klein, con't - then p.17)
∂14 Jul 1981 1516-PDT	CSD.GREINER	News from ISI
To: csd.lenat
cc: CSD.GREINER

Steve just called me -- he has accepted the challenge, and is set to
immerse himself in the glory and wonderment of RLL.  I proposed he
meander here relatively soon -- hopefully while I'm indoctrinating Greep.
So perhaps next week, or the week just thereafter.  Is that ok by you?

I'll dig up the forms I have for product release.  I guess you and I
should sign the RLL release, and you and Dave the CORLL one -- or are
both necessary?

Next issue: which machine?  There are a slew of hassles just switching from
SCORE and Rand-Ai; and I'd rather not be responsible for 3 machines.  Should
I encourage Steve to contact Rand, and see if they can give him an account
(which I assume will be difficult, given the hope of the Rand people to keep
Rand-Ai uncluttered), or should Steve get an account on SCORE -- at least
for his training time?  Or should RLL sprout a 3rd home?

-----
No news on either the thesis or BES front:  My principle text editing
machine is SAIL, which has been flakey of late... So I've been fixing up
some of the RLL-related utilities, and now will get back to finishing
up the Rand task.

------
Any word from Tom Deitterich, or Jim or (who was the third person you were going
to contact)?  Also, have you talked anymore with the woman from South Africa?

	Russ

∂15 Jul 1981 1153-PDT	CSD.LENAT	rll news
To: CSD.GREINER

Sounds good; anytime is OK to have Steve up.
I think it best if he works over the net on an ISI machine;
it can't really be that difficult to switch -- just the FTPing
hassles, and you can let HIM be responsible for that -- you just
keep "the latest" version somewhere (Rand or Score) and make
sure he can ftp from that place, and gets notices of new "releases".
Probably he'll just take one semisolid vversion anyway.

Saw Jim and Tom and Avron, and don't know yet who if anyone
will be joining up.  Should know soon. Probably NOT Tom,
as he seems fixed upon Dave Smithing it -- doing some
small thing very carefully, theoretically, and properly,
rather than some big thing anyway possible.

Doug

∂TO SKLEIN 11AM 27-Jul
Well....
Steve:
	So, when are you hobbling up north?  I'm in no particular rush,
but others are:
Some people have been asking about RLL-ish sorts of things, requesting
demos and things like that.  I figured I could do that whilst showing
you the system, as that was about to happen any day now.  And now they
are starting to show the first signs of impending impatience.
(Can "impatience" be "impending"; or did I just make that up?  Sounds good
anyway...)

	By the way, would you like to do a bit of propoganda-spreading and
possibly recruiting during that stay?  We of HPP have a weekly meeting
at which you could probably speak; if you've the yen, time, interest,
guts, ...  The standard time is Friday, at noon.  Let me know...

	How're things there?   In the police hdqrs?  At ISI?
I did get your little blurb
	Caio,
Russ

∂TO CSD.SMITH@SCORE (CC SKLEIN@ISIB) 14:37 10-Aug
New CORLLer
Dave -
	Steve Klein (SKLEIN@ISIB) is now using RLL, and hence CORLL as well.
Could you add him to the list of people whom you inform about each CORLL
fix/update/modification.
	Thanks,
Russ

∂10-Aug-81  1524	David E. Smith <CSD.SMITH at SU-SCORE> 	Re: New CORLLer     

I don't have any such list.  I also won't be using CORLL anymore and hence
don't intend to do any maintenance on it.
-------

	RLL Mini-Tutuorial - ca 3-7 August 1981 - Klein, Jonathan King, Greep

∂27-Jul-81  1736	Steve Klein <SKLEIN at USC-ISIB> 	Re: Well....    
To: RDG at SU-AI
In-Reply-To: Your message of 27-Jul-81 1308-PDT

Sorry.  Next week would be ideal.  We need a few more days to ready "test
material".  I haven't figured out whether I want to end up there Sunday or
Monday yet, though.  I decline all propaganda and such things opportunities
as they make me nervous.  Page 27 mention is one of the fine opportunities
ISI offers.  All is as it usually somewhat is.  The mass defections going
on at the moment are making people mildly odd (I think I mentioned that
eight to ten people are deserting).  Having a hard time deciding where to
look for a house (and running out of time).  Sandy's having a hard time
deciding what she wants to do in general (would you work for the LAPD?)
Let me know if you made any plans such that I should choose a different
arrival time.
-------

∂TO CSD.LENAT 13:23 28-Jul
RLL Mini-Tutorial
Doug -
	Looks like Steve will be coming next week, circa Monday.
I plan to just give him an informal run thru (spending only, say,
part of Monday), and let him then attack his particular task.

	I'll contact Jonathan King (now of HP) and have him sit in, if he wants.
I've not seen Greep recently, but he may want to join this ensemble also.

	Do you want to give any blurbs, sales pitches, or what-not?
Shall I expose them to MRG, and his MRS?  Time to make some color glossies?
Any comments, etc.?

Russ

∂28 Jul 1981 1450-PDT	CSD.LENAT	RLL DEMO/TUTORIAL
To: CSD.GREINER

No special presentation.  Forget MRS -- do not strain their
minds needlessly.
Doug

∂28-Jul-81  1542	Steve Klein <SKLEIN at USC-ISIB> 	no = yes   
To: RDG at SU-AI

is it to be presumptioned dat the plan of yesturdday iss acceptable?
you have a spare floor piece for a while by any chance?

∂29-Jul-81  1126	greep at RAND-UNIX 	Re: RLL Tutorial-ette    
In-reply-to: Your message of 28 Jul 1981 1334-PDT.

Yes I'd like to observe.

Best mailbox (and one most often checked) is greep@SU-DSN.  However,
the most reliable one (in terms of the machine being up) is greep@RAND-AI.

∂TO SKLEIN 15:26 29-Jul
No, no, no, ja, oui, no, si, cain, nein, lo, ...
Sure - I'll be busy both Sunday and Monday nights (dancing and Basketballing,
respectively).  But come whenever.
(Unless you want a chaffeur service. Feel free to use my car if you
need a vehicle (it's manual transmission, if that makes a different).
Only I don't have all that much time...)

As to floor space: my landlord has some funny policies wrt guests
-- he doesn't especially like people in general, and visitors in particular.
So I'll not be able to supply even floor space, unfortunately.  Perhaps
Tom could?  Wasn't ISI going to store you in some fancy-smancy hotel, or
at least give you some allowance to reward you for braving the wiles of
perfunctory(sp) Palo Alto?  If not, then it's not too surprising to hear
of a whole herd's defection from there...

Anyway, I still don't know quite what I'm going to do then.  Probably
spend part of the first day completing a tour thru RLL's current set up;
and then let you loose.
If you've some particular thing you'd like to see demonstrated, let me
soon.  Otherwise you'll get whatever mishmash seems appropriate to me;
and I've often been wrong in such decisions.

Some people: Jonathan King of HP and Steve Tepper (alias Greep [his choice])
will probably be in the audience as well, at least during the introductory
session.

By the way, did Ben contact you?  He's on one of his periodic n-month vacations,
and is starting from LA.  I gave him your name, number, address, ...
For symmetry,
	Ben C. Moszkowski
	  (213) 477-2105 -- [Mother "L"ena] ?, Los Angeles, CA 900??
	  (213) ?	 -- [Father] 2567 S. Barryton Ave, Los Angeles, CA  90064

---
That's all for now.  See you soon.
	Russ

∂TO SKLEIN @ ISIB 12:43 31-Jul
tick, tick, tick, tick...
Steve -
	So when should I expect you?  And where?  If you like, I can ask
for floor space for you.  CS people with spare rooms include
	Milt Grinberg - CSD.GRINBERG@SCORE
	Mike Genesereth - CSD.GENESERETH@SCORE

See you soon,
	Russ

∂31-Jul-81  1636	Steve Klein <SKLEIN at USC-ISIB> 	Re: tick, tick, tick, tick...       
To: RDG at SU-AI
In-Reply-To: Your message of 31-Jul-81 1243-PDT

Russ--
Da Details:  I'll be arriving there this Sunday a bit around 10:30pm.  My
return is for the following Sunday at Noon.  I have semi-room arrangements
(currently a hole for Tuesday nite--there seems to be a Chess tournament there)
and a vehicle, so no problems there...I'll get hold of you Sunday evening to
see what's next, unless you have alternative suggestions.
Steve.
-------

∂ 1 Aug 1981 2031-PDT	GREINER		RLL Demo
To: greep at RAND-UNIX, greep at SU-SCORE, jjk at SU-AI, stt at SU-AI
cc: greiNER

... will be held at 11 AM, this Monday morning; if all goes as planned.
(Steve's due to arrive the previous night.)
Please meet in my office - 251 Margaret Jacks.
	Russ
-------

	Follow up conversations with Steve Klein (from 12-Aug-81 on)
∂TO SKLEIN 12:06 12-Aug
All sorts of miscellany
Yes, I did see (and subsequently destroy) your note; and did 
probe about a bit, but couldn't find your pad.  Sorry.  Are you sure it
wasn't in you hotel room, or under something in the car you rented?
Shall I give 'em a call?

I see the traffic-controller's absense has been felt - given your exciting
voyage back.  I'll heed your warning, as best I can.

Thanks for fixing up the EMACS.INIT file.  For some reasons the desired
HEATH.* files have never been stored on the obvious <EMACS> directory,
on SCORE.  (The file I sent lives on [Rand-Ai].)  Anyway, substituting
<CSD.HPP-UTILITIES> for <EMACS> renders the file usable.

I've been fixing up the AllIsas/MyAllIsas stuff - and then I'll return
to the FSeeUnit stuff.  Do you want to be vice-president in charge of
writing the "record-changes-to-nucleus" stuff for RLL?
You may assume that every put/add/delete/substitute calls the function
DefaultAfterPutValue, or assorted arguments.
(Even those hand-crafted after-put-values contain this call.)
Hence an appropriate edit of this function would be sufficient.

Suggested algorithm:
	Check first if the unit affected is in a nuclear KB.
[The UA-KB? function returns the full name of the KB to which a unit
belongs.  We'll need a global variable to hold the relevant KBs --
possibly this variable should be set in RLL-StartUp.]
	Next make sure the change is at "top level" -- there is no
reason to spend time and energy to store effects which follow from
some known initial action.  This will use the "why" variable;
which will soon undergo radical changes. (See below.)
	Now for the hard part: We only want to record "relevant"
alterations.  For example, I may add a new subclass of Anything, say AnyFrog,
which is in the DUMB kb.  There is no reason you need
to know about that.  So here we'll need code which examines the "modif"ication
variable, to determine whether all the additions were to nuclear
unit, or something like that.  Of course it gets further complicated if
ever I add both AnyFrog and AnyRLLUnit to Anything at the same time
(where AnyRLLUnit does indeed belong in the nucleus).  Now you'll have
to subset the values, ...  (Boy I'm glad you'll be doing this, and not me...)
	If all of these pass, write on some external file what
this change was.  The easiest mechanism may be to walk back up the
stack to the call to *Value, where * is [Put, Add, Delete, Subst],
and then write out that function, and its arguments as quoted values.
[Of course if you do the full-blown modification described in the third
paragraph, you'll have to twiddle those values accordingly.]
(The function ?UU-RECORD?? (sorry, I don't have my CORLL manual here)
might give a hint for how to do this.)
----
Other functions which have to be massaged:
CreateUnit, KillUnit, RenameUnit -- this is straight forward:
simply recording what unit has been changed, and how.
From here on the various PutValue's will
do the required work.

Final consideration:  This recording function should probably be written
as a seperatable function, or at least a macro.  I may, for example, 
want to make some quick change to some nuclear unit, and not want to
go thru the entire rigamarole (sp) of the expensive PutValue call.
To avoid trouble, though, I should jot down this change in that external
file... I don't know, maybe we should just advise UA-PUTPROP accordingly?
(Or perhaps UP-PUT, going a unit at a time.)

Do you thing this will work?  Realize there should be some general mechanism
for doing this sort of task, as even when RLL's nucleus ceases its
leaps-and-bounds growth, there will still be times when several people
will want to use a common KB, even though each person is working on his
own distinct task.

-----
Anyway, I should get back to work.  I'll be spending time with brother Milw{↔{"α7?;&eβπv!αSW/≠∪πebβπ;⊃π##↔9ε∪∃βπ"βS#∃∧≠?∨;O#'[∃¬≠∂'↔v≠∃β7.+S';:p4*%>c1βS↔IβS=π∪↔SW⊗qβS=εCπ∂/Ns≥βSFQβ←.+-7↔v!↓!I∩iIMα∂+≥%1ε;⊃β&C↔9αJ;304V∪∃β∨}s∃βWw#'1↓"jO↔C"q↓↓→∧I∨[∃π≠S'3bαKπ;"kK↔3∂#↔⊃β∨#W≠→π#=β∪zaβ;?"βS<4Vk↔;SN{9β7Jβ≠πIo#?=7f{;≥7v+∨3↔∨#↔⊃β&C↔O'~p4(4T{9β?&C↔Iβ7∪?;S~aβOSNc1β;zβ←?K"β≠K?jα∪π;
q↓α%π≠WCC␈≠∃βSF+K∃∨~β¬β[/∪d4+≡c↔πIεk↔OO∞;∃β'rβS#'~βO'3.s∂∃9αα∪π7rβ←?7.q1βπwK←πeλh(4*f+Qβ7*β/;?:β←#π"βg?U?∪∃βWαβS=9αα∨??"β3W∂Zβ?9βN{WIβF{WO∃o≠#?CεK;≥8hP4*K/≠L4(hP=EIlW≥5C	↓↓E#)P&N\b⊗&9εQαV≤→6&NL⊃&K+Qαπ3bβO?K'→β?→εk'O∂.c3π;J↓↓4Ph*KW∨→544Ph*%β6{W;⊃π##∃βv{S↔}{?/MεcπOQεs'∨#"q9;SF+eβ←/∪∃β/∪'↔⊃ε{9β7Jβ∪↔OZ↓#S#O→β↔CO≠?∪∀hSSK'>;↔K↔"βπ9β∂#S↔7π!βπQε≠3↔πw+A%9ααS#πv[Mβ≠␈⊃β3?}[';≥ε;⊃β≡{KKeε3?Iβ&C∃β←Nc⊃44V;??O*k∂#π≡)βπOε+∂SMr↓αS#*βSπOZβg?Uπ≠↔Qβ␈+Qβ3}{/Mβ6+πO'⊗c∃9↓∧I∨5β'∪g';:βS<4V3';'≡AβWAπ≠?7↔&C';≥π≠#?K"βπQβ&C∃β7}k↔;QbβO=αJ;31β>+Qβ∞≠-βSzβg?UεK9β¬ε#πe↓Zh4)E{⊃βS=εc↔QβN{Uβ/v{]β←F+S#↔∩α%βπ?∪↔∃β>KS!↓zβW;∪/∪OSπv!βπ3bβ?→βN{WIβ␈+S3'v)84(hRW;∪/⊃βS#*β∂'K∨+7OS∞s∂↔Mbβg?W∩βπ;πgKO'Mε{→βSF)βO''+πS'}qβ←'&Aα∪πv	β'MπβK?∞∪3d4W∪'∨#"q9;g␈)β7'>CQβ←∞sQβSzβSKeε;↔SSNs≥βO}k∃β∂f+πIβ∨#πS↔n+;Qβ7∪?5βF+I1β∞cS#?.; 4+&CπQβ≡{W3⊃ε∪∃βO}k↔←#∂!βCπNs≠W1rq9↓αJβ∨W↔∨→βO#*β#πOr;Qβ∂}k∃βSzβ∨K'π_SεS with the 
global effects of her actions.

Nothing useful happening at this end (at least at the moment...).

Steve

	(klein, con't)
∂ 6 Sep 1981 1539-PDT	<CSD.GREINER at SU-SCORE>	Recent actions
To: sklein at USC-ISIB
cc: greiner at RAND-AI

Well, I just returned from my IJCAI, and subsequent venture into beautiful,
charming, backland-campgrounds in British Columbia.  And now back to work:
(This is the prior message should have said.  Please delete that erroneous
version...)

Just what sorts of things have I been doing of-late:
I've been working out (a first pass at) a list of those additional values
which get passed to GetValue, PutValue and friends.
GetField and PutField will soon have a similiar list:

The third arg to GetValue - "other" in most functions - is an unordered list
(actually an FSet) whose elements may be:

  (FAST-CACHE s1 s2 ... sN)  -- this causes the atom Fast-Cache to be passed
	to CacheValue, on its "why" list, for each slot, si.
  (-CACHE s1 s2 ... sN)      --  tells the get-values NOT to cache the computed
	value of any slot si.
  (-COMPUTE s1 s2 ... sN)    -- the get-values will not bother computing the
	value of any slt si; if the value isn't stored, just forget it.
  (IGNORE-CACHE s1 s2 ... sN) -- the get-values will NOT use the stored value
	of any slot si -- but rather will compute those values as needed.
  (SAFESLOT s1 s2 ... sN) -- each si really is a slot; so don't bother to 
	confirm this.
  (SAFEUNIT u1 u2 ... uN) -- each ui is really a unit.
---
[Note I am trying to adopt the convention that binary conditions be indicated
 by using some name, prefixed by + or -, depending on sense.  In general only
 one form (eg either +←←← or -←←←) will be necessary, as the other sense is
 the overall default.  For example, +CACHE is superfluous.]
---
In addition, any of these elements can be a single atom -- one of that
{FAST-CACHE -CACHE -COMPUTE IGNORE-CACHE SAFESLOT SAFEUNIT} list.
In the first 4 cases, this means the implied action will happen to every slot.
An atomic SAFE←←←← applies only to the current slot or unit.
(This might be wrong; but it did save CONS cells for the standard cases.)

I reserve the right to further elaborate this convention to suit my whims
at any later date.  For example, one may eventually want to be more specific
in determining which slot's values to, eg, ignore -- as in
   (GetValue 'Fred 'Friends '((IGNORE-CACHE AllExamples (AnyFrog AllIsas)))),
which means the cached values as U:AllExamples will be ignored for all
units U, but that V:AllIsas will be accepted EXCEPT WHEN V=AnyFrog.
I cuurently have no use for such a "feature" - do you?
Another direction may be to have forms which are evaluated during the call,
will appropriate bindings --
  (GetValue 'Fred 'Friends '((IGNORE-CACHE =Fn fn#37))),
where this fn#37 will be applied to the unit and slot being considered at
each (recursive) call to GetValue; and its values would be used as the set
of slots whose cached values should be ignored.  A slight variation of this
would be something like (... ((IGNORE-CACHE =Pred= pred#82))), where pred#82
would be a predicate whose nonNIL response meant the argument should be
"ignore-cached".  Once again, this sledge hammer may not ever be really needed,
but it has been considered.

Final comments:
(i) SAFE and CONSTANTSLOT (AND MAYBE FAST-GET) have followed the dodo
	into extinction -- there were never really used, and I now
	realize they were never even needed.
(ii) The "VERY" of VERYSAFESLOT and VERYSAFEUNIT was dropped as superfluous.
(iii) I'm sure I will need more of these values; but am waiting for a forcing
	example before implementing and documenting those options.
       [Examples: (USE-VALUE (u1 s1 val1) ... (uN sN vN)) meaning "pretend"
	the value of ui:si is really vali -- don't bother to compute it.
	There's also some hassles when dealing with those *DO* special 
	values -- should they be treated as simple "syntactic" values, or
	"evaluated" -- ie how do I store the "value" (*DO* FSeeUnit SofU)
	as U:S?  As I said, more on this as this comes important -- unless
	you've some insights on this whole can of worms.]
-------

Onto the putting functions.  I should warn you that I now think that there
is at least one fatal problem with this overall specification approach,
which I'll convey after presenting this previously-thought-correct spec.

Anyway, again the final argument is a set of zero or more elements,
each of the form
	[These apply to any of PutValue, AddValue, DeleteValue, SubstValue]
  -VERIFY -- there is no need to verify that this value is appropriate, or
	that this slot belongs on this unit.  (Yes, this may indeed be 
	confusing two distinct functions.  Eventually I worry about this,
	if I have to.)
  -INVERSES -- do NOT now add on inverse links (this is useful when this
	particular PutValue was itself adding backpointers.  If not for this
	facility that process would always lead to an infinite loop...)
  -DEPENDENCIES -- do NOT do the other miscellaneous KB updates which result
	from this modification.

	[This only applies to PutValue]
  +ALWAYS-UPDATE -- go thru the motion of adding inverse links, and other
	after-put-value functions after performing an update -- even if the 
	value seems NOT to have changed. (Ie pretend the old value was really
	RecomputeMe.)  This is needed to handle the case of unit 
	initialization, when values are first simply UA-PUTVALUEd onto the 
	unit, and later have to be actually PutValue-d.

	[These only apply to AddValue, DeleteValue, & SubstValue]
  +COMPUTE-INITIAL -- What should you do when you've been told to add on a
	new value, V, onto U:S when there is no value of U:S?
	There seem two possibilities:
	(1) do everything you can to compute the value of U:S,
	   and then add on V.
	(2) simply go on, (leaving U:S uncomputed) with the assurance that
	   any one from now on who wants
	   to find the value of U:S will specifically ask for it, using 
	   GetValue; which will now have to compute it.
	   The asssumption is that S:ToCompute will now catch this new V.
	Anyway, it turns out that both of these cases come up -- hence this
	extra parameter.
	[Note I believe the current programs will always compute the value if 
	the slot is primitive -- as this means the value is NoEntry or 
	NoEntries, depending on the format of the slot.  This is probably 
	the wrong approach...]
  N-Values -- In general one wants to add on just one value, V, to a value of
	U:S.  However there are times one may want to add a slew of {Vi} at
	once.  The purpose of this value is to distinguish these cases.
	Note this is well defined for both AddValue and DeleteValue; but
	may lead to confusion for SubstValue, if we want to replace N values
	with M values, when N <> M.  Of course we may simply bar this operation
	in general.

-------
Sounds good?  Well, there is a problem:
Why should PutValue need to know anything about adding inverses?  I'll
agree that DefaultPutValue should, but things at this level should be totally
invisible to the general user-level functions.  It should be sufficient
to tell PutValue that we are now AddingInverses, and nothing more.
The functions which PutValue calls, such as DefaultPutValue, should
now infer that this means not to add inverse pointers to these, ...
So this seems to imply I should go back to the earlier convention, which
stored values like AddInverse in that extra argument.

I now need a table which relates those parameters with what they really
mean --
		Verify?		Inverse?	Dependencies?
New-Unit	  +  		  +
KB-Consistency					  +
AddInverse					  +
DeleteInverse					  +
RemovingForeigners				  +
UnitRenamed					  +
UnitDeleted					  +
<default>	  +		  +		  +


This conversion would now take place in DefaultPutValue -- and each function
it calls (Default←←←PutValue, where ←←← in {Before Actual After}) would 
have what it needs to perform the apt action.
(Similarly for DefaultAddValue, ...Delete... and ...Subst... .)

-------
Implementation:
As I keep changing my plans in mid-implementation, none of these changes are
yet totally done.  Hopefully today and tomorrow will be sufficient to either 
get everything mentioned here to actually work, or to find why are doomed to 
failure.  Note I have made the appropriate (or inappropriate?) changes to
all of the units -- using EMACS (now my recent EMACS question probably makes
more sense...)

-------
I also changed a few other things: NewPossibleSlots is now MyNewPossibleSlots,
which it should have been all along.  Also the value of a unit's MyCreator
is now a unit, rather than a string.
All of these are recorded in the various files on [Rand-Ai]<GREINER.RLL>,
of course.  Let me check them out, before you bring them over to [ISIB].

-------
Another question: Did you ever discover why no one can log into MANCOM.RLL?
To see what sort of stuff you've been working on recently, I've tried to
examine just what new stuff has been deposited in MANCOM.RLL;
and found this could only be accomplished if I logged
in as you -- which I decided was unethical, after doing once.
Let me know (1) if you want me to look over your shoulders (read: spy) on
you work, and, if so, (2) how I can get access to USC-ISIB.

-------
Eventually I get around to finishing up the FSeeUnit stuff, and the stuff for
Rand, and, possibly, thesis stuff, and ...

Take care,
Russ
-------
                ---------------
-------

∂ 7 Sep 1981 2237-PDT	GREINER		Current updates
To: sklein at USC-ISIB
cc: greinER

STEVE -
	I SPENT A WHILE TODAY HONING THE SPECIFICATIONS FOR THOSE
EXTRA ARGUMENTS.  THE DOCUMENTATION, WHICH MORE OR LESS CORRESPONDS TO
THE CURRENT CODE, RESIDES IN [RAND-AI]<GREINER.RLL>SPECS -- YOU MIGHT
AS WELL SNARF THIS MORE RECENT PIECE TO EXAMINATION, ESPECIALLY IF YOU'VE 
NOT READ THAT LAST OPUS MAGNUS.

	AS SUGGESTED, I MEANDERED ABOUT [ISIB] EARLIER, TO SEE WHAT I
COULD SEE.  (GOD, AM I NOSY! (NOSIE?))  ANYWAY,
+  ADVISING GCGAG SEEMS AN INTERESTING APPROACH...  
+  SPEAKING AS SOMEONE WHO'S BEEN BURNED BY GIVING PRIN1 ONLY ONE ARGUMENT,
I RECOMMEND ALWAYS GIVING THESE WRITING FUNCTIONS THEIR RESPECTIVE FINAL 
ARGUMENTS.  I PERSONALLY HAVE FOUND XUTIL'S TRIVIAL LITTLE WRITELNTTY 
FAIRLY USEFUL; THE OTHER NICE CANDIDATE
IS PrintOut.  (<- whoops - I thought ↑X↑U would upper-case the current word.
I now realize it UCs the entire region.  Why doesn't EMACS have a 
"undo what I just inadvertantly did" command?)  I twiddled P-PLST to use
PRINTOUT; and it now seems to work correctly.  (We probably should merge
our respective versions of this function.)
+  Final comment: those *.PAGE-RLL files are only usable if the associated
RLL.EXE sysout is still around.
Otherwise you may as well save yourself some space and delete them when
disposing of the corresponding sysout.

[By the way, the algorithm for aborting a session is:
	(i) ↑Cing out of the current InterLisp environment,
	(ii) closing files as necessary,
	(iii) noting the extentions of the various *.PAGE files, before
	(iv) deleting those *.PAGE files, then
	(v) renaming *.PAGE-RLL to be *.PAGE files, WITH the extentions
		you noted back on (iii), and finally
	(vi) reenterring that RLL.EXE sysout.
 ]

Anyway, do send me your improvements/suggestions/criticisms, etc,
sooner rather than later.  I'd like to start chisling
into granite, rather than continue sculpting in low-tide sand.
Also please send along other questions -- in particular that list of 
still-to-be-documented units.

-----
EMACS:  I copied the "Time Only" command from your EMACS.INIT file.  
Freeing up that space helps to read the long filenames I constantly
seem to be editting; and besides, anytime I don't even know what day it
is...  With the same goal in mind, is there someway to remove the 
left corner's 6 superfluous characters: "EMACS "?

Next: why is it the first time I use EMACS in a session it appears unable to
find the filename I give it?  Ie EMACS tells me I'm now editing a new file,
even though I gave it a good file name -- one which it finds when I then
read it in using ↑X↑V.  Any ideas?

Back to FSeeUnit -- well, first a complete DEMO, and then FSeeUnit --
actually, first that complete DEMO, then some timely Rand stuff, and then ...
-- no, first DEMO, then thesis proposal, then FSeeUnit... -- oops, 
what about MACROs?  oye.

Russ

Ahh, I can hear the dreaded malathion-laden helicopers overhead.
-------
                ---------------
-------

∂07-Sep-81  0006	Steve Klein <SKLEIN at USC-ISIB> 	congrats on resync 	congrats on resync   

welcome back to the world...i haven't digested your message yet.
short status until i formulate a longer one.  coming along nicely
on staring at pieces of the system...the basic problem of "acquiring"
your "mindset" in order to semi-justify / understand what goes on
when.  also testing my understanding by trying to feed stuff to other
people at the same time.  also made a bunch of "changes"/extensions to
some functions, but couldn't get new versions to compile, so just
accumulating deltas for the moment...i'll find out why you can't
login direct to mancom.rll, but feel free to log in to my account.
on other things, do you have access (know where to find) a manual
for emycin?  i didn't see one when i was up there, was wondering if
its possible to get hold of one...
i'll send you more status on world when i digest your msg on tues.
steve
-------

	(klein, con't)
∂TO SKLEIN 14:49 13-Sept
More than you ever wanted to know...
Steve -

I figured you may be wondering what I've been doing these days -- ie why
haven't I sent along a set of pointers to the promised RLL-with-subunits
systems.  Well, I've been piddling around.

In case you're interested, I'm sending along a lengthly description of
the latest "RLL glaring omission" which I've tried to plug.
(Actually, I'm really hoping you'll have some comments about all of this,
which will make it yet gooder.)

Turns out RLL needed a more general notion of inverses
-- of which Inverse is but a (useful) special case.
This will serve many functions in the current unit/slot/value
system, but may turn out to be superfluous when dealing with propositions.
Still it should serve as a lead-in to such systems.

So I created and merged in the PseudoInverse slot.
The value of S:PseudoInverse will be a list of elements of the form
(T f1 f2), where T is a slot, and f1, f2 are functions.
To illustrate the semantics of these values, consider the example
which motivated this.

The value of RLL.STATUS:Networks is a list of KBnames -- eg
(SLOTS LISPFNS EURISKO ...).
Corresponding to these entries is the value RLL, on the DependentNetworks slots
of each of SLOTS.STATUS, LISPFNS.STATUS and EURISKO.STATUS.
Note that RLL, SLOTS, LISPFNS and EURISKO are NOT units; and so we cannot
say that Networks:Inverse = DependentNetworks.
But we do want something quite similar 
-- ie adding the value FOO to RLL.STATUS should cause RLL to be added to
the DependentNetworks slots of FOO.STATUS.

Enter PseudoInverse:  We state the 
	Networks:PseudoInverse = ( (DependentNetworks ENSTATUS DESTATUS) ).
The various inverse updating mechanism know this means that for each value V
on U:Networks, the DependentNetworks slot of (ENSTATUS V U) will have a 
corresponding value: (DESTATUS U V).
[ENSTATUS takes a single argument, and PACKs on a ".STATUS" to its end;
while DESTATUS strips that ".STATUS" off its single arg.
Here we are just giving these functions an addition argument.]

Note that 
	DependentNetworks:PseudoInverse = ( (Networks ENSTATUS DESTATUS) ).
For the time being, (<= wierd expression, ain't it)
I am pretending that
	PseudoInverse:PseudoInverse = ( (PseudoInverse H1 H2) ).	(*)
where 
  (H1 y x) = (CAR y)
  (H2 x y) = (CONS x (CDR y))

[Consider what this means:
 Spse S:PseudoInverse = ( (T f1 f2) ).  This (*) statement means that the
PseudoInverse slot of the unit
H1[(T f1 f2) S] will include the value H2[S (T f1 f2)] -- ie
that T:PseudoInverse includes (S f1 f2).

That certainly works for the DependentNetworks/Networks and
PseudoInverse/PseudoInverse cases.
Realize that S:Inverse = T is just like saying
	S:PseudoInverse = ( (T IDENTITY IDENTITY) ) 
-- and this (*) rule works for these cases as well.

However, there are cases where (*) fails.
[Consider (f1 a b) = (CAR a) and (f2 b a) = (CONS b (PLUS (CDR a) 6)).
 In this silly example, we have Owns:PseudoInverse = ( (Possessor f1 f2) ).
 Now what should happen is
	Russ:Owns = ( (Shoes . 1) (Socks . 2) )
 implies
	Shoes:Possessor = ( (Russ . 7) )	and
	Socks:Possessor = ( (Russ . 8) ).

 If Possessor:PseudoInverse = ( (Owns f1 f2) ) for these same f1 and f2, then
	Socks:Possessor = ( (Russ . 8) )
 would force Russ:Owns to include (Socks . 14), in addition to its current
 (Socks . 2)!  Clearly for this example, we want
	Possessor:PseudoInverse = ( (Owns f1 f2') ),
 where (f2' b a) = (CONS b (MINUS (CDR a) 6)). ]

The problem is the H2 function.  It should be something like
  (H2 x y) = (LIST x (G1 (CADR y) (CADDR y)) (G2 (CADR y) (CADDR y)))

where (G1 f1 f2) returns a function c, such that	|
  U = (c (f2 U V) (f1 V U)),				|
and (G2 f1 f2) = d means				|
  V = (d (f1 V U) (f2 U V)).				|

<It's easy to confirm that 
 f2'[ (f1 V U) (f2 U V) ] = f2'[ (CAR V) (CONS U (PLUS (CDR V) 6)) ]
	= CONS[ (CAR V) 
	        (MINUS (CDR (CONS U (PLUS (CDR V) 6)))
		       6) ]
	= CONS[ (CAR V)
	        (MINUS (PLUS (CDR V) 6) 6) ]
	= CONS[ (CAR V) (CDR V) ]
	= V,
as desired. >

However, I've no idea how to construct that H2 function 
-- nor even how to automatically verify the condition marked by | above.
So for the time-being, I'll use the simpler H2 function, pretending that
this covers all the cases.

Anyway, another big win of this approach is that we can now accomodate
multiple inverse.
For example, we can now simultaneously indicate that
	John:Mother = Mary  =>  Mary:Child = (Fred, ...)
  &	John:Father = Fred  =>  Fred:Child = (Fred, ...).
Earlier we'd have run into problems as we could either state
that Child:Inverse = Mother, or Child:Inverse = Father, but NOT both.
Now we can state that
Child:PseudoInverse = ((Mother Identity Identity) (Father Identity Identity))
& Mother:PseudoInverse = ((Child Identity Identity)) 
& Father:PseudoInverse = ((Child Identity Identity)) .

[By the way, the existing mechanism for slot Format insures that this
inverting sort of stuff is distributed to each member of a list, set, ...]

Other changes:
	The value of a slot's KBUpdates slot is still a function, but now
this function has more responsibility -- it will do ALL the KB updates,
including the inverse sorts of things -- including those PseudoInverse things.

Also, those sub-unit things belong, I think, in a seperate KB,
soon to created and christened FIELDS.
We can decide later whether this should be included in the
nucleus or not.

My final comment answers MRG's objection to RLL's use of things like
	(Brother Russ (Miles Wiley))
rather than
	(Brother Russ (SET Miles Wiley))
Turns out that change is trivial -- requiring only that I make a small change
to the FnForxxxing slots of the various slot format units -- FSet, FList, FBag, ...
(Of course eventually this sort of change should be made on the
MultipleElements unit -- recall that MultipleElements is one of the format
characteristics.)

----
Comments, criticisms, major objections?

By the way, how is life in general?

Finally, I'll be a-Randing later this week.  Unfortunately it looks like
I'll be fairly busy throughout my stay, trying to get my part of this project
off the ground.  But I'll give you call if an opportunity arises.

Russ

∂14-Sep-81  1429	Steve Klein <SKLEIN at USC-ISIB> 	Re: More than you ever wanted to know...      
To: RDG at SU-AI

Greets--
This message will probably contain more than you ever wanted to respond to...
Backing up a ways, I see the need for something like the notion of

 ∂TO SKLEIN 17:46 21-Sept
Return comments
  *  My comments are prefaced by those silly "*"s -- but I'm sure you already
  *  deduced that...

"JustificationalSlots", perhaps a hierarchy, such that, somehow, a unit must
have some minimum set of JustificationalSlots to be well-formed.  A unit
should not have any existence unless it contains DIRECTLY some reason for that
existence.  At the moment, that info is diffuse and subject to modification
(via MyEssentialVirtualSlots), but generally the set of things like Descr,
HighLevelDefn, ToCompute, CVUsedBy, DefnUsedBy, LispFn, DerivedFrom,
SlotsUsedInBuilding, UsingFunctions, SlotsBuiltFrom, UseToGetSlots, anything
that contains a function, etc etc.  Many units seem to be missing
"definitional" content, thus heavily obscuring their reason for existence.
Unfortunately, this is all complaint and no solution, since it probably ties
in intimately with the general problem of constraints.
  *  Doug used to talk quite a bit about the "Defn" slot of a unit -- which
  *  basically merged together all of these definitional attributes.  I (at
  *  least initially) felt that HighLevelDefn would fill that role, 
  *  but I now agree that it doesn't -- at least in its current incarnation.
  *  Certainly for variables
  *  we have to specify which things they are defined as, and which are 
  *  simply assertions on this intensional object.
  *  But it's not clear to me whether this definitional/assertional dichotomy
  *  makes much sense for "constants".  IE is Steve "defined" by his hairlength
  *  and shoe color, or his gender and age, or ...

  *  Now maybe there is something to say about the Steve UNIT, defined as
  *  describing a constant object, and hence having ...  This is some meta
  *  type of fact; and I don't know how to go about saying anything about it.
  *  (In fact, such assertions might even be meta-meta-level.  Consider the
  *  question of whether the Steve unit is well-defined sans this
  *  Justification slot.)

What is your general view concerning negating the existence of a slot?  As
example, if AnyBird has a typical slot FlightSpeed, how to notate and 
resolve that this slot is not relevant to Penguins.
  *  Never thought about that -- but you do have a good point. This points
  *  to yet another of RLL's incompletenesses.

  *  One could concoct a quick and dirty solution, which basically relies on
  *  a "NotMeaningfulHere" constant to serve this function.  
  *  This value would be stored on TypicalPenguin; and the FlightSpeed:ToGetValue
  *  function would "know" this meant Penguins lacked this FlightSpeed
  *  characteristic.

  *  Another solution is based on the realization that our MakesSenseFor
  *  friend is simply a shorthand to facilitate communication with the more
  *  general slot, DomainType; which is quite nice for many special cases 
  *  -- just like the connection between DataRange and RangeType.
  *  One could give FlightSpeed:DomainType the value
  * (FListN (UnitType (L-AND (*P AnyBird) (L-NOT (*P AnyPenguin))))
  *	    UnrestrictedType)
  *  or
  * (FListN (UnitType (L-AND (*P AnyBird) (*MembSlotVal BirdCharacter Flighty)))
  *	    UnrestrictedType)
  *  where Penguin#35:BirdCharacter does NOT include Flighty, whereis the value
  *  of this slot for most birds does.
  *  [feel free to ignore the enclosing (FListN ... UnrestrictedType), for now.]
  *  Anyway, it is this DomainType slot which is checked when asking whether
  *  FlightSpeed(x) is meaningful -- and here we would find it is not.
  *  Note that this DomainType specification would (or at least should) push 
  *  TypicalBird into FlightSpeed:MakesSenseFor,
  *  which is only sorta what we really want. Oh well...

  *  There are a bunch of people who have had their hands in this pie
  *  recently -- like Brachman (see "I lied about the trees"), Fahlman
  *  (see "Cancellation in a Paralle Semantic Network"), and Mark Fox
  *  ("On Inheritance in Knowledge Representation").
  *  (Some of the now old-ish stuff by Sussman, Doyle/McDermott and Reiter on
  *  dependency and multiple inheritance addresses some of these issues as well.)

  *  Anyway, I strongly agree with these papers in insisting that such information
  *  be explicit (but Im sure you'd guess that would be my position, based on
  *  RLL's basic design objectives); but it's still not clear what the 
  *  best (or even what acceptable) approaches really are.
  *  I'd love to hear any solution to this problem you have...

NittyGritty: Interlisp seems to have this interesting property that when the
directory under which a file was created is different from the directory in
which the file is residing, then prettyprinting any functions from that file
causes that function to be marked as changed ("can't find <mumble>---, loading
from <blarf>---").  Needless to say, since all the RLL files were made on one
of your machines, looking at their fns causes havoc with the filepackage's
beliefs concerning the world.  Any thoughts/solutions/pointers?
  *  Finally a question I can answer!
  *  Use the function CHANGE-SYSTEM, on XUTIL (or was it XUTILM?).  I think
  *  this will do the job.  Note you need to use this for (eventual)
  *  MAKEFILEing of the various files -- which I think is done automatically
  *  by some advise to MAKEFILE.

wrt oTHERs type stuff...it seems to me that the more complex these
specifications get, the more that must be known about the full context
of a GetValue  =>  non- locality/granularity of representation,  encouraging
"monolithic" optimization (refers to preds, functions, use-value forms).
I can definitely see how they could help, but also forsee pitfalls.
  *  I too anticipate a great many problems with any list I might construct.
  *  My current objective is basically to enumerate these values, and indicate
  *  (my expectations for) their current semantics.
  *  Ideally I would like for these values to be strongly "implementation
  *  independent", in the sense that they make no (strong) assumptions
  *  about what the x:ToGetValue functions really do.  Likewise for the
  *  why values wrt x:ToPutValue functions.

*Do* stuff...I don't know exactly how you would store one of these values
EXCEPT as the syntactic string (maybe I misunderstand...). I'll await
clarification.
  |      There's also some hassles when dealing with those *DO* special 
  |      values -- should they be treated as simple "syntactic" values, or
  |      "evaluated" -- ie how do I store the "value" (*DO* FSeeUnit SofU)
  |      as U:S?  As I said, more on this as this comes important -- unless
  |      you've some insights on this whole can of worms.]

  *  Oh, the point here was that typing (something like)
  *   (PutField U S F V)  will actually store (*Do* FSeeUnit SofU) on U:S.
  *  Should the user have "permission" to store such a value?
  *  Or what should the user actually put a value like 
  * (*Do* FExecute (LAMBDA (u s o) (...))
  *  on, say, TypicalX:SlotY?
  *  Note that the standard process for verifying the value fail here...
  *  Similarly what is the "real" value of TypicalX:SlotY?  That 3-element
  *  list, or the value of that final function, applied to TypicalX, .. or what?
  *  It gets even messier when you want to add on a value to this TypicalX:SlotY,
  *  etc.  Anyway, I've just sorta hacked around a bit, to get system which
  *  seems to work for most of my applications... But I'm by-no-means happy
  *  with it.

Advising GCGAG doesn't get anywhere, since fn does "pokes" to somewhere,
rather than being an active participant in GCing.
  *  Did you find that function?

If you do an Emacs ↑X↑U (uppercase region), it can be undone by M-X Undo,
if you actually haven't seen this, it usually will fix region deletions and
such things too.
  *  Thanks.

Given your defn of aborting an RLL session, I shall take it upon myself
(unless some reason not to) to write a suitable abort function.
  *  In what language?  Do you mean some DO or MIK file, to used after you've
  *  ↑Ced out of LISP?  Or some LISP function, which does all the necessary
  *  running around within LISP, and then LOGOUTs, inserting the appropriate
  *  name in the buffer; or ... ?

I don't think I ever found out from you what you were doing at Rand...
except associated with ROSIE (as I recall)...what's the status of your
contribution, and what's the status of ROSIE in general (I seem to recall
claims of "releasing" it at some point, whatever that means).
  *  No, that ROSIE thing was a one-shot thing a while back. 
  *  As best I understand, Henry Sowizral (HENRY@Rand-Ai), is now "in charge"
  *  of ROSIE.  He plans to add considerable featues to it, some along
  *  the RLL-ish lines of facilitating the modification of ROSIE itself using
  *  itself (ie the ROSIE input language).  We'll see.

  *  I'm actually working on the "Planner Workbench" project.
  *  RLL will be used, in the initial implementation, as nothing more
  *  than a DB management tool.
  *  Actually, their notion of the final system represents, to me, a good
  *  place to start serious research.
  *  So, for now, I'm in a position of addiog a few new bells and whistles to
  *  RLL, to get it handle this task. (Yawn)  Eventually Keith Wescourt (and
  *  perhaps Rick Hayes-Roth) will be sufficiently indoctrinated into RLL's
  *  ideas and workings that I can leave them to play with it, freeing me
  *  to do thesis sorts of things (but remaining on-call, for bug fixes, and
  *  perhaps commenting on their proposals, etc.)

more EMACS, if you remove the string "EMACS " from the mode line, then
all the mode line stuff croaks (I tried it for you...).  Several parts of
the package use absolute char locations and some seem to WANT that string
at the front...feel free to modify the relevant code (yuk, yuk).
  *  Oh well, thanks for trying... I'll stick to E, on the (relatively) huge
  *  DataDisc's.

I tried to reproduce your emacs file-not-found error, but both "emacs file"
and "ed file" came up with the file (as long as file is fully enough
specified..."ed" does completion on <esc>, of course, while "emacs" doesn't).
  *  Well, it does keep happening to me.  I'll soon send you a full scenario
  *  to play with...

<MANCOM.RLL> is now log-in-able.  Seems you have to ask the system types
to make changes to the accounting crud, rather than this property being
inherited from the superior directory (such stupidities in the world).
  *  Just another way these higher-ups justify their continued existence in the
  *  world; and of continuing their affliction of maximum misery to all involved...

Did you have a chance to look for an EMYCIN manual (or know where I can
ask for one)?
  *  I did indeed look around; and found myself threatened with various
  *  unspeakable bodily-harm type punishments if I dare to bring up this
  *  sore point again.
  *  It seems that manual is "almost done" (as in "your check is in the mail") --
  *  and will be deliverable just after these "last few updates and additions"
  *  are incorporated... Where have I heard that before?  
  *  (oh, I was from my lips? whoops...)
  *  Anyway, they promised to tell me when; and I'll forward either that
  *  information, or the manual itself, as soon as I can.
  *  (If you want to nag as well, try CSD.BENNETT@SCORE and/or CSD.PEAIRS@SCORE.
  *  I don't think their thug-squads travel that far; and I assume you're
  *  responsible enough not to mention your source (ie poor, defenseless me)
  *  to them...)

Final-- answering your basic question.  I wasn't convinced by your argument
for PseudoInverse slots.  Rather than question your mechanism, let me
question the instances in which you want to invoke it.  
  -  what's wrong with having an RLL unit which represents the
    existence/essence of RLL...seems to be only an extension of the
    purpose of the current RLL.STATUS unit.  Doesn't this cause your
    objection to the use of the normal Inverse slot to go away?
	* Yes, in this particular instance.  (Actually there are some
	* potential implementation-level problems with that approach --
	* basically because CORLL twiddles the name, and possibly the
	* property list, of its atoms.)
	* However this example was not what really "forced" me into PseudoInverses.
	* Recall how artificial the IUseCVOf and IUseDefnOf slots seemed --
	* their only reason for existence was to force that inverse pointer,
	* the CVsUsedBy slot, to get a value.  The same might be said about
	* Datatype, which needs to be present for the IsTypeOf to get a value.

	* Not any more: we may regard CVsUsedBy and HighLevelDefn as
	* PseudoInverses, and avoid that intermediary IUseCVOf slot,
	* and its set of headaches, altogether.
	* There are in fact several slots in this category -- and it'll be
	* a real joy to find them start to disappear.
	* (Don't worry, I'll not go about doing this until AFTER more timely
	* things on my queue have been completed.)

  -  for multiple inverses, such as Child --> {Mother Father} I question 
    whether the proper relationship isn't  Child <--> Parents which IS
    conceptually one-to-one.   More generally, Inverses should be able
    to handle many-to-one situations as a normal course of events.
    Is there a specific reason for Inverse being single-valued?
    So far, I'm not familiar enough with expressing solutions in this 
    type of formalism to go any farther.
	* I'll grant one can regard Children <-> Parents as the natural
	* inverse relation -- in fact, it was only with such arguments that
	* I managed to live with the limitations associated with the 
	* single-valued Inverse functions.
	* Of course people (including myself) feel much more comfortable
	* claiming that 
	* Mother:Inverse = Child, & that Father:Inverse = Child 
	* as well.  So why should RLL keep them from this description?

	* Inverse's single-valued-ness is an historic accident.
	* Like many other RLL things, this convention began in the days
	* when Doug was designing EURISKO; it's just taken until now
	* to get around to improving on it.
	* This (perhaps misnamed) PseudoInverses is what Inverses should
	* have been all along.  Only, like DataRange or MakesSenseFor,
	* as the single Inverse value is so useful for most cases, it will
	* be left in...

On other matters, there be nothing happening...this consistent reporting
of nothing of note is discouraging, I wonder whether my existence is
proceeding downhill at the same rate as the rest of the world...
	* I know what you mean.  I've been spreading myself so thin that
	* I've not really "finished" anything in quite a while.  I do think
	* that headway has been made in each of my pursuits -- enough so
	* that "soon" a bunch of things will find themselves done.
	* (Include here Fields, Rand stuff, macros, SPECialization, ...)
	* Still this part here is frustrating.


Steve.
---

  *  Miscellanous comments:

  *  First, I'm hereby stopping those now-meaningly "  *  " prefaces.

Second, Tom and I bumped into Greg Gibbons at IJCAI.
He now works for Schlumberger, as a mathematician, in France.
His boss decided it was time for someone to learn about AI,
hence his trip.

Third, what is the implementation status there?  Until Bill's recent letter,
I'd thought you'se guys were still at a sufficiently early stage that
nothing was being coded -- and you were, collectively, exposing yourself
to RLL.  More on this will appear in my letter to Mann@ISIB.

Too-da-loo,
	Russ
∂22-Sep-81  1613	Steve Klein <SKLEIN at USC-ISIB> 	smaller response to previous msg    
To: RDG at SU-AI

Greets agin

interesting how things swell and then decay in lengths of messages...this one
is definitely towards the decayed end (either way).

On the Justificational stuff, I am pretty much in agreement with your
statements...extensional objects should probably be described by their usage,
rather than their creation.  Fairly close to your meta-level defns.  This
seems to be the "only" large pitfall.

On session abort, I wrote a LISP fn which (I think) correctly aborts a 
session (only when abort is your idea, not something like a crash), but
don't understand your reference to "inserting the appropriate name in the
buffer" at logout...something needs to be executed after quitting LISP? 
(or is this a suggestion for pre-loading exec cmds for, say, file
manipulation...).

Our current status.  A brief description.  The grammar which is the basis of
things operates by making choices about various aspects of the
utterance-to-be.  The way the whole system is organized is by putting
"choice-experts" at each point where a decision needs to be made.  The choice
expert makes its decision by asking questions of the "environment" --that area
of the world outside the grammar proper.  The questions are in the form of
pre-defined operators.  In the "grand scheme" the operators have the sole task
of accessing the KR (RLL) and formatting the resulting answers.  At the
moment, some 60-80 operators are defined (out of, perhaps, 200 or so to
eventually exist).  These operators, however, don't have a KR to muck around
in and instead just retrieve stored answers to questions or ask for help.  The
next task is to start defining the representation and implementing the
operators (one at a time) to really access the defined concepts/etc.
Consequently, the "threshold" of action revolves around getting this stuff
firmed up (as you have hoped for anyway...).  The general feeling is
eagerness, rather than desperation, since there are always things to work
on, but everything is soooo close now...

Otherwise, basically nothing new or interesting of note...I have this
feeling that the life of my car is growing limited (maybe just worrying...).
May the kiwi of happiness smile on your salt shaker.

Steve.
-------

∂22-Sep-81  1949	Steve Klein <SKLEIN at USC-ISIB> 	you rang   
To: RDG at SU-AI

hi again.  I lost a bunch of messages when our system crashed...if you 
zapped off anything today, I haven't seen it (ie please resend else consider
this message a noop)
steve.
-------

	(MANN at ISIB)
∂16-Sep-81  0447	MANN at USC-ISIB 	RLL progress     
To:   RDG at SAIL
cc:   SKLEIN

Russ:

I'm  trying  to  do  some fresh time estimates about how we can
make progress on the PENMAN code.  The grammar is coming  along
reasonably  well,  but I need to know better when we can resume
working on  the  representational  parts.   I'm  worrying  some
because  we've been on hold (but learning, of course) for about
a month now.

Could you give me an idea of how soon the fields implementation
will be done?  It would help.

Cheers.

Bill Mann
-------

∂TO MANN (CC SKLEIN) 18:06 21-Sept
Status
Oops, sorry -- I hadn't realized I was holding things up.  
As I've told Steve, finding and patching the thousands of
non-trivial cracks in RLL facade is a full time job; and I've been
guilty of doing perhaps too much of this, of late.
(I feel abit like that Dutch boy, trying to prevent a torrent
from escaping....)

To answer your question: I'm about one person-day away from implementing
a full working version of fields.
Most of this time will be devoted to testing --
finding the bugs in the algorithm I am now feel "positive" will work flawlessly.
The problem lies in finding that day.

I should mention I've been in this state essentially since Steve left here.
Three of the weeks have been split between conferences and vacation;
and the remaining time has been devoted to doing first Rand-related
stuff, and now new student orientation/advising chores.
In all cases the tasks have been timely, and should soon be behind me.
Anyway, I'll move this fields stuff above thesis-proposal writing on my agenda;
and hence should be able to work on it over this week-end,
barring terminal burn-out (in either sense).

I hope these delays haven't hurt your cause too much.  As usual, everything
just converged at once...

Ciao,
	Russ
∂TO SKLEIN@ISIB 10:06 28-Sept
Slippage
Damn these computers anyway.
I lost a full day Saturday, thanks to a combination of trouble at Rand-Ai,
and an earlier act of carelessness on my part.  Unfortunately, I was already
a bit behind my schedule -- my job on the student orientation committee
took about an order of magnitude more time than I had expected this last
week.

So... at this point the Field stuff is on the top of my still-to-do agenda
(as opposed to the just-completed stack).  I'll definitely get to it today,
and perhaps even finish it. You'll be posted.

Sorry about the delays.  I did want to assure youse guys that you've not
been abandoned; and that I have been making forward progress (basically
by clearing away other distractions).

Russ

PS How are things there? ... and how is your nervous breakdown coming?

∂28-Sep-81  1119	Steve Klein <SKLEIN at USC-ISIB> 	Re: Slippage    

Hi.
Don't feel too frazzled.  I've been beating my head against a wall for
several days now, converting our previous stuff from prop lists to the
record package...ten thousand picky details.  Consequently, haven't gotten
back to REAL work yet.  Time will tell on the breakdown front...I have to
decide whether to flush UCLA down a hole for a while (or forever).  
Persevere (the breakfast of masochists).
Steve.
-------

∂TO SKLEIN@ISIB 16:18 2-Oct
This and that...
Steve -

Well, I'm now in the final debugging stage of Fields.  As predicted,
it's taking about one solid day of hacking to get the last 10% to work.

So why aren't I working on it now?  Basically because I don't have any
solid blocks of time before this evening -- I hope to finish it up then.
I'd previously allocated the other night (30-Sept) to that task;
but found Rand-Ai uncooperative -- it was bouncing up and down all evening;
due, apparently, to power problems caused by the storm youse guys were
having then.

Anyway, rather than waste this morsel of time, here's the basic message
I'd scheduled to write you upon completion of that overall task.

The KB FIELD holds the various miscellaneous sub-unit/field units, and
associated functions.  When it's all the way finished, I'll mail along
a dribble file showing it in operation.  Basically, it will
work as we had discussed:

Verification for all ComplexSlots, (such as Performers,)
is done by finding the function returned by a GetField call:
The value V may be stored on U:S only if V passes the test
administered by the function returned by (GetField U S 'VerifyAll).
[The verification function, in general, is (GetValue S 'VerifyAll), by the way.]

So how does GetField work?
As you guessed, it calls the function on F:ToGetField, which defaults
to DefaultGetField.  
A description of that function follows:
(GetField U S F oth) first checks to see if there is a subunit, on U:S.  
If so, it calls GetValue(SofU F), and returns that value.
(Here the F is treated as a slot, and the value of its ToGetValue slot
is used to do the work.  This may involve F:ToCompute, or anything else.)
Anyway, the more interesting case is when there is no such subunit.
Here the value of F:ToComputeField is used.  This function is applied
to all the arguments, and it is responsible for returning the value of
this call.  CacheField is then called, which uses the F:ToCacheField
function to (consider) storing that newly computed value.

The default field computer, DefaultFieldToCompute, does about what you'd
want:  It first gets the U:OrderedPrototypes, and walks along these
prototypes, searching for the first whose S value is a subunit
which has an F field.  Note the embedded GetField call uses the
others value of (-CreateSubUnit).  This tells DefaultGetField to stop
if there is no subunit.  (Note all the standard "others" values, used by the 
GetValue functions, are applicable.  And a few others - like this -CreateSubUnit,
and SAFEFIELD.  I reserve the right to expand this list as whims suit me.)

Anyway, if the value of any of these GetField calls IsOk, that value
is returned.  Otherwise, (GetValue S F) is called, and its value is returned.
[There is a possible optimization which could be made to that mapping --
it could stop at any prototype which is a member of S:MakesSenseFor.  
This exploits the fact that there will never be a TypicalThing:ToAddValue value,
much less a ToAddValueOfTypicalThing subunit, even though TypicalThing is
included on any slot's OrderedPrototypes.  This improvement/hack has NOT been 
added yet to DefaultFieldToCompute, because of the arbitrariness of the 
order of the U:OrderedPrototypes elements.  Ie the fact that one upward
branch has terminated does NOT imply the others have.  This would only mess
you up if there were more than one value on S:MakesSenseFor, and some class
descended from both of these -- both of which are rare occurances, but I
still didn't want to chance it...]

The current default DefaultCacheField function is pretty simple: it first
sees if the value of U:S is a subunit, and if so, UA-PUTPROPs the new value
on the F slot of this subunit.  Otherwise, if there is no such function, this
caching function does nothing.
[Of course more elaborate functions are possible: for example, you may want
to actual create a new subunit at this point, or whatever.
See the function FNewFieldUnit for possible insights into that creation process.]

Default functions for PutField (and maybe AddField and DeleteField) are now
being checked.  There are still a few small issues which I have to resolve:
like how to decide when to create a new sub-unit, what are accepted "why"
parameters, etc.

--- Problems ---
Well, that's the good news. Now for some of the problems.  Perhaps
you've some insights which will help solve them...

First, what the hell are SubUnits anyway?  What slots do they allow?
I earlier declared them to be intensional objects -- created to fill the
role of specifying the value of a slot in a particular unit.
Should they be allowed to serve other functions as well?

Basically each subunit looks a lot like a slot -- ie finding
GetField(U S F), when U is a member of S:MakesSenseFor, may end up evaulating
GetValue(S F) -- ie any slot which can be on a unit representing a slot can
(syntactically) be a field, apparently.  Plus others.

So I decide to make each subunit an element of the class of all slots;
(this was necessary when doing the type checking, to decide if the, say,
RangeType slot was defined for the PerformersOfTypicalObligaton subunit,)
and declared that any slot can be a field.
(That was simpler figuring out the set of all possible slots which might
ever appear on any unit which represents any slot -- ie the Union of all 
MySensibleSlots over all possible slots [or, equivalently, over all
typicalX's, where X is a subclass of slots.])
It seems inelegant not having an explicit list of these fields, but ...

This leads to the next problem -- as the same thing can be either
a slot and a field, it should have (implicitly at least) a pair of LispFn's.
[Descriminating between the cases can almost be done simply by examining
the number of arguments it has been given.  Unfortunately,
the case of two arguments is STILL ambiguous -- only resolved
when that 2nd argument is evaluated:
Arg 1: <slot> a Unit	<field> a Unit
Arg 2: <slot> others	<field> a Slot
Arg 3: <slot> undefined	<field> others
-------

--- other things ---
PseudoInverse has come into existence, as promised.

The DefaultAfterPutValue function has been greatly simplified - with
more of the work now distributed to the slots themselves.

Terminating a session will be faster now -- KBs are only sometimes
de-virtual-slotted: only when they have to be compressed.  This is
now done at closing time, rather than when opened.
[DBL's laid-back philosophy, I realize now, was to let lots of things slip
thru the cracks during a session.  It was, therefore, essential that these
little problems be removed with some regularity -- hence the
regular RemoveVirtualSlots calls.  RLL is now much cleaner -- and whereas
there is still some slop, most virtual slots are up to date; and deserve
to stay around.  So now a KB will be "logically" compressed only when it is 
being "physically" compacted.]

Various small things have been added to the XUTIL* files -- nothing all
that interesting, but necessary when I found that Dave had ignored
my changes when making his, forcing me to redo my updates...

----
More later -- when I've some real results to announce.

Hope all is well with you.  I've been doing little but hacking the last
few days -- mostly for Rand, some for you at ISI, and the rest on general
improvements to RLL, further solidifying it.

Russ
∂TO SKLEIN (CC MANN) 15:48 12-Oct
Ta-daaa!

Finally that needed day!
I think RLL is ready for your perusal.  Still no guarantees, of course,
but there's now a version which seems to work over all of the examples I
threw at it.

Proposal:
One of the next messages is a long (about 1000 lines) dribble file, showing
the sort of stuff you asked for.  After looking through that, please
send me a message, telling me the sorts of other things you'd like to see.
These would then be demonstrated (or added...) -- either real time, with
you TALK linked to me, or in the form of a (perhaped cosmetically edited)
dribble file.

At that point you could send over your delta files, to be incorporated
into the basic [Rand-Ai] files.  These could then be FTPed to [ISIB].

Statement of Philosophy wrt FIELDs:
Everything dealing with FIELDs is stored in a seperate module -- so fields
are NOT integral in the basic RLL system.
(Actually this is what required most of the time -- making those changes
"undoable".)  Anyway, you will have to load in that FIELD kb when starting
a session.  (Of course this could be done automatically, once RLL learns
about SteveKlein...)

Caveats:
I figure now would be a good time to acquaint you with some of the other
fixes I've made to the RLL system over the last while, in case you get
bitten by any of them.  [Of course these should be totally transparent to you.]
A subsequent message, soon, will enumerate these.

Russ
∂TO SKLEIN 15:57 12-Oct
That dreaded Dribble File
-*-*- This is a composition of 3 dribble files, taken from sessions over
-*-*- the last two days, editted only to remove irrelevant (and potentially
-*-*- embarassing) typing.  My comments are prefaced by "-*-*-", as you might
-*-*- have guessed.

 ***  Am opening Dribble file: <GREINER.RLL>TRACE.OCT11.1 [11-Oct-81 17:29:01]
<GREINER.RLL>UTIL.COM.31

-*-*- Bunch of start up stuff, deleted out of courtesy to your eyes ---

10←START]
Am leaving the tracefile as NIL.

                   Welcome to RLL-1!
Reading in RLL now.
Opening knowledge base <GREINER.RLL>RLL.KB.19
Last read NIL
Last written 11-Oct-81 16:55:04
Copying from <GREINER.RLL>RLL.KB.19 to <GREINER.RLL>RLL.PAGE.1.


Last written by (GREINER  6-Oct-81 14:03:52)
Opening knowledge base <GREINER.RLL>LISPFNS.KB.18
Last read NIL
Last written 11-Oct-81 16:56:15
Copying from <GREINER.RLL>LISPFNS.KB.18 to <GREINER.RLL>LISPFNS.PAGE.1.


Last written by (GREINER 11-Oct-81 16:55:29)
Opening knowledge base <GREINER.RLL>SLOTS.KB.21
Last read NIL
Last written 11-Oct-81 16:53:48
Copying from <GREINER.RLL>SLOTS.KB.21 to <GREINER.RLL>SLOTS.PAGE.1.


Last written by (GREINER  6-Oct-81 14:00:59)
Opening knowledge base <GREINER.RLL>USERS.KB.18
Last read 11-Oct-81 13:44:57
Last written 11-Oct-81 16:54:21
Copying from <GREINER.RLL>USERS.KB.18 to <GREINER.RLL>USERS.PAGE.1.


Last written by (GREINER 11-Oct-81 16:54:04)
Openning the file RLL.
compiled on 11-Oct-81 17:06:35
FILE CREATED 11-Oct-81 17:06:16

-*-*- 8 ARRAY space GCs later -*-*-
-*-*- (I never figured out what in RLL requires all of this array space.) -*-*-

RLLCOMS
Loading in <GREINER.RLL>RLL.COM.10.
You are about to write on an external file.
Do you want to enter ReadOnly mode? no

-*-*- More GCs -*-*-

This kb, RLL is already connected to all of (USERS SLOTS LISPFNS RLL).
Do you wish to read in any Knowledge Bases? yes
Do you want to read in your usual (SPILL HEURS EURISKO)? no
Which Knowledge Bases do you want loaded in? 
   1 -- DEMO
   2 -- FIELD
   3 -- BIKE
   4 -- RATALE
   5 -- SPILL
   6 -- RESOL
   7 -- GENLINFO
   8 -- BIOLOGY
   9 -- SETS
   10 -- MATH
   11 -- NUMBER
   12 -- HEURS
   13 -- EURISKO
   14 -- OLD
Enter the numbers of the ones you wish to use: 1 2
Do you want these to be your usual KBs? no
Do you wish to use you standard openning options, (Y (N) NIL)? yes
Opening knowledge base <GREINER.RLL>DEMO.KB.4
Last read NIL
Last written 11-Oct-81 16:34:23
Am compressing DEMO.
Copying from <GREINER.RLL>DEMO.KB.4 to <GREINER.RLL>DEMO.PAGE.1.

collecting atom name characters
39, 551 free cells, 34 pages left

collecting arrays
715, 715 free cells, 33 pages left
Last written by (GREINER  6-Oct-81 13:22:41)
Openning the file DEMO.
FILE CREATED 29-Sep-81 21:30:00
DEMOCOMS
Loading in DEMO.
This kb, DEMO is already connected to all of (DEMO USERS SLOTS LISPFNS RLL).
Opening knowledge base <GREINER.RLL>FIELD.KB.4
Last read NIL
Last written 11-Oct-81 16:35:15
Am compressing FIELD.
Copying from <GREINER.RLL>FIELD.KB.4 to <GREINER.RLL>FIELD.PAGE.1.
Last written by (GREINER 11-Oct-81 16:35:03)
Openning the file FIELD.
compiled on 11-Oct-81 17:10:02
FILE CREATED 11-Oct-81 17:09:54

collecting arrays
697, 697 free cells, 33 pages left

collecting arrays
576, 576 free cells, 33 pages left

collecting arrays
187, 699 free cells, 32 pages left
FIELDCOMS
Loading in <GREINER.RLL>FIELD.COM.5.
This kb, FIELD is already connected to all of (FIELD DEMO USERS SLOTS LISPFNS 
RLL).
KBs loaded.
NIL
11←UF.NETWORKS
(<GREINER.RLL>FIELD.PAGE.1 <GREINER.RLL>DEMO.PAGE.1 <GREINER.RLL>USERS.PAGE.1 
  <GREINER.RLL>SLOTS.PAGE.1 <GREINER.RLL>LISPFNS.PAGE.1 <GREINER.RLL>RLL.PAGE.1)
12←SOS RUSS
Bye now.
(Just created the sysout <GREINER.RLL>RUSS.EXE.1)
It is now 11-Oct-81 17:34:54.
Closing DribbleFile <GREINER.RLL>TRACE.OCT11.1


-*-*-- HERE I ADDED ON THE NEXT DRIBBLEFILE -*-*-

 ***  Am opening Dribble file: <GREINER.RLL>TRACE.OCT12.1 [12-Oct-81 10:37:12]
Am leaving the tracefile as NIL.
The following KBs can now be opened: (<GREINER.RLL>FIELD.PAGE.1 
<GREINER.RLL>DEMO.PAGE.1 <GREINER.RLL>USERS.PAGE.1 <GREINER.RLL>SLOTS.PAGE.1 
<GREINER.RLL>LISPFNS.PAGE.1 <GREINER.RLL>RLL.PAGE.1)


Copied the network <GREINER.RLL>FIELD.PAGE.1 onto <CORE>FIELD.PAGE-RUSS.


Copied the network <GREINER.RLL>DEMO.PAGE.1 onto <CORE>DEMO.PAGE-RUSS.


Copied the network <GREINER.RLL>USERS.PAGE.1 onto <CORE>USERS.PAGE-RUSS.


Copied the network <GREINER.RLL>SLOTS.PAGE.1 onto <CORE>SLOTS.PAGE-RUSS.


Copied the network <GREINER.RLL>LISPFNS.PAGE.1 onto <CORE>LISPFNS.PAGE-RUSS.


Copied the network <GREINER.RLL>RLL.PAGE.1 onto <CORE>RLL.PAGE-RUSS.
NIL
-*-*- So, as you can tell, I've just started.  Note the KBs loaded include FIELD,
-*-*- which holds the sub unit stuff.  The DEMO kb houses the examples I'll work
-*-*- through.
13←RLL-LIST (DEMO]
(TypicalPoorPerson Momma IsaOfGeorge Possessions Daddy DEMO.STATUS Parents 
                   AnyPoorPerson PossessionsOfGeorge Frank Steve Moms Gender 
                   AnyPerson George TypicalPerson 
                   PossessionsOfTypicalPoorPerson)
14←DI(AnyPerson]
  AnyPerson  
         [[ TypicalPerson ]] 
           AnyPoorPerson   
                 [[ TypicalPoorPerson ]] 
                 ** George ** 
        The unit TypicalPoorPerson has already been shown
         ** Daddy ** 
         ** Momma ** 
         ** Steve ** 
         ** Frank ** 
    The unit TypicalPerson has already been shown
!DONE!
-*-*- I was using Possessions to make my point.  Here's what I've done: -*-*-
15←EU Possessions
edit
8*PPU
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        "29-Sep-81 21:56:06"
MyCreatedAs     (IExamples (AnyComplexSlot))
Isa     (AnyComplexSlot)
RangeType       (FListN IntegerType IntegerType)
MakesSenseFor   (TypicalPerson)
PseudoInverse   NoEntries
OrderedPrototypes       (TypicalComplexSlot TypicalComputableSlot TypicalSlot 
                                            TypicalUnitFn TypicalStorableFn 
                                            TypicalFunction TypicalProcess 
                                            TypicalConcreteThing TypicalThing)
AllIsas (AnyComplexSlot AnyComputableSlot AnySlot AnyUnitFunction AnyUnitListFn 
                        AnyStorableFn AnyFunction AnyProcess AnyConcreteThing 
                        Anything)
OrderForToInit  7
MyAllIsas       (AnySelfAwareUnit AnyUnit AnyConcreteThing Anything)
VerifyArgs      [LAMBDA (val)
                  (AND (NOT (IGREATERP (LENGTH val)
                                       2))
                       ([LAMBDA (xy)
                           (AND (Unitp xy)
                                (OR [MEMB (QUOTE AnyPerson)
                                          (GetValue xy (QUOTE AllIsas)
                                                    (QUOTE (SAFESLOT FAST-CACHE 
                                                                   FAST-GET]
                                    (MEMB (QUOTE AnyPerson)
                                          (GetValue xy (QUOTE MyAllIsas)
                                                    (QUOTE (SAFESLOT FAST-CACHE 
                                                                   FAST-GET]
                         (CAR (NTH val 1)))
                       T]
VerifyElement   [LAMBDA (un slt val sub xtra modif)
                  (AND [EVERY (COND
                                ((MEMB (QUOTE VerifyN)
                                       xtra)
                                  (LISTP val))
                                (T (ListIfOk val)))
                              (FUNCTION (LAMBDA (valu)
                                  (SOME [QUOTE ([LAMBDA (xy)
                                                   ([LAMBDA (x)
                                                       (FIXP x]
                                                     xy]
                                                 (LAMBDA (xy)
                                                   ([LAMBDA (x)
                                                       (FIXP x]
                                                     xy]
                                        (FUNCTION (LAMBDA (pd)
                                            (APPLY* pd valu]
                       modif]
Format  FListN
KBUpdates       [LAMBDA (uThisUnit uThisSlot new modif why)
                  (AND T T]
-*-*- Notice it is a AnyComplexSlot - this means the various accesses to this unit
-*-*- will use GetField (not GetValue) calls -- ie thru subunits when necessary.
-*-*- (Note, by the nature of DefaultFieldToCompute, if no there are no relevant
-*-*- subunits, GetValue will be called, on this Possessions unit.  We'll see this
-*-*- in detail later.
-*-*- Let's look at that unit:
9*p
(MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation 
"29-Sep-81 21:56:06" MyCreatedAs (IExamples &) Isa (AnyComplexSlot) RangeType (
FListN IntegerType IntegerType) MakesSenseFor (TypicalPerson) PseudoInverse 
NoEntries OrderedPrototypes (TypicalComplexSlot TypicalComputableSlot 
TypicalSlot TypicalUnitFn TypicalStorableFn TypicalFunction TypicalProcess 
TypicalConcreteThing TypicalThing) AllIsas (AnyComplexSlot AnyComputableSlot 
AnySlot AnyUnitFunction AnyUnitListFn AnyStorableFn AnyFunction AnyProcess 
AnyConcreteThing Anything) --)
9*10 p
(AnyComplexSlot)
10*EU
Editting the unit AnyComplexSlot.
edit
11*p
(MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation 
" 8-Aug-81 17:32:03" MyCreatedAs (ISubClass &) Isa (AnyClassOfObjects) 
TotalSoFar 0 SuperClass (AnyComputableSlot) TypicalExample TypicalComplexSlot 
UnitExamples (Possessions VerifyAll1 TypicalComplexSlot))
11*-3 p
TypicalComplexSlot
12*EU
Editting the unit TypicalComplexSlot.
edit
13*PPU
MyIsa   (AnyTypicalExample AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        " 8-Aug-81 17:40:30"
MyCreatedAs     (ITypEx (AnyComplexSlot))
Isa     (AnyComplexSlot)
MyNewPossibleSlots      NoEntries
TypicalExampleOf        AnyComplexSlot
Datatype        (NonNILType)
BeforePutValue  ComplexBPV
ActualPutValue  ComplexActualPV
ActualAddValue  ComplexActualAV
ActualDeleteValue       ComplexActualDV
ActualSubstValue        ComplexActualSV
-*-*- Two notes:
-*-*- 1. "Complex" prefixes these functions.
-*-*- 2. Note the absense of ToPutValue, ToGetValue, etc.:  
-*-*- 	The DefaultxxxValue functions are sufficiently general that they
-*-*-	will call these complex beasts at the correct time, (I think).
-*-*- Anyway, back to Possessions (next time I chose an example with fewer letters)
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACE.OCT12.1 [12-Oct-81 10:47:06]
14*ok
Nothing changed.
TypicalComplexSlot
15*ok
Nothing changed.
AnyComplexSlot
16*p
(AnyComplexSlot)
16*↑ f RangeType
18*p
... RangeType (FListN IntegerType IntegerType) MakesSenseFor (TypicalPerson) 
PseudoInverse NoEntries OrderedPrototypes (TypicalComplexSlot 
TypicalComputableSlot TypicalSlot TypicalUnitFn TypicalStorableFn 
TypicalFunction TypicalProcess TypicalConcreteThing TypicalThing) AllIsas (
AnyComplexSlot AnyComputableSlot AnySlot AnyUnitFunction AnyUnitListFn 
AnyStorableFn AnyFunction AnyProcess AnyConcreteThing Anything) OrderForToInit 7
 MyAllIsas (AnySelfAwareUnit AnyUnit AnyConcreteThing Anything) VerifyArgs (
LAMBDA & &) VerifyElement (LAMBDA & &) Format FListN --)
-*-*- Note this implies the value of any X:Possessions slot will be a pair of 
-*-*- integers.
18*ok
Nothing changed.
Possessions
17←EU AnyPerson
edit
19*f UnitE≠		; the ≠ character is really <esc>, by the way.
=UnitExamples
22*p
... UnitExamples (Daddy Momma Steve Frank TypicalPerson) SuperClass* (AnyPerson 
Anything))
22*ok
Nothing changed.
AnyPerson
18←EU Daddy
edit
23*p
(Isa (AnyPerson) MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation
 " 3-Oct-81 23:19:02" MyCreatedAs (ICopiedFrom &) Gender Male)
23*ok
Nothing changed.
Daddy
-*-*- Let's see:
19←(PutValue 'Daddy 'Possessions '(4 6 9]


   *****   
Unable to find (SAFESLOT):ToGetField. Perhaps (SAFESLOT) is not a unit?   ***** 
Break?  yes
Unable to find (SAFESLOT):ToGetField. Perhaps (SAFESLOT) is not a unit?
NIL

(ERROR broken)
-*-*- Oops - someone is passing the wrong arguments:
20:BT
ERROR
*PROG*LAM
Warning
GetAccessFn
GetField
DefaultFieldToComputeA0185
*PROG*LAM
MapUntilOk
DefaultFieldToCompute
DefaultGetField
GetField
ComplexVV
ComplexBPV
*PROG*LAM
DefaultPutValue
PutValue
**TOP**

21:ARGLIST(DefaultFieldToCompute]
(uN sL fLD oth)
22:BTFN DefaultFieldToCompute

   oth NIL
   fLD (SAFESLOT)
   sL Possessions
   *ARG1 Daddy
DefaultFieldToCompute
**TOP**

-*-*- BTFN is a macro which searches the stack for certain functions.
-*-*- I find it very useful.


-*-*- AND HERE IS THE THIRD DRIBBLE FILE -*-*-
-*-*- Explanation: the TIP went down, so I quickly (tried to)
-*-*- save everything I had.  Apparently I was successful...

 ***  Am opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [12-Oct-81 11:08:45]
Am leaving the tracefile as NIL.
The following KBs can now be opened: (<GREINER.RLL>FIELD.PAGE.1 
<GREINER.RLL>DEMO.PAGE.1 <GREINER.RLL>USERS.PAGE.1 <GREINER.RLL>SLOTS.PAGE.1 
<GREINER.RLL>LISPFNS.PAGE.1 <GREINER.RLL>RLL.PAGE.1)
None of the KBs were touched last session.
Do you still want to go ahead and copy some? no
NIL
24:uNoUnitPuts
T
-*-*- This variable is reset when the WS is "dirtied" -- when some unit
-*-*- is put of an external file.

-*-*- Anyway, on with the debugging:
27:BTFN GetField

   *ARG4 (-COMPUTE-FIELD -CreateSubUnit)
   *ARG3 (SAFESLOT)
   *ARG2 Possessions
   *ARG1 TypicalPerson
GetField

   *ARG4 (SAFESLOT)
   *ARG3 VerifyAll
   *ARG2 Possessions
   *ARG1 Daddy
GetField
**TOP**

28:REEVAL DefaultToComputeField T
I couldn't find any function named DefaultToComputeField.
29:REEVAL DefaultFieldToCompute T

(DefaultFieldToCompute broken)
30:?=
uN = Daddy
sL = Possessions
fLD = (SAFESLOT)
oth = NIL
31:BT
DefaultFieldToCompute
*ENV*
DefaultGetField
GetField
ComplexVV
ComplexBPV
*PROG*LAM
DefaultPutValue
PutValue
**TOP**

32:BTFN DefaultGetField

   *ARG4 (SAFESLOT)
   *ARG3 VerifyAll
   *ARG2 Possessions
   *ARG1 Daddy
DefaultGetField
**TOP**

33:REEVAL DefaultGetField T

(DefaultGetField broken)
-*-*- This must be the offending function, as its args are correct,
-*-*- but those to DtfFldTC were wrong
34:UB
(DefaultGetField)
35:!EDIT
Editting the function: DefaultGetField
loading from <GREINER.RLL>FIELD..7
prop 
edit
-*-*- Yes, that is another MACRO.
24*p
(LAMBDA (uNIT sLOT fIELD oTHER44)   **COMMENT**   (DECLARE & &) (CheckOther 
oTHER44 FIELD-OTHER) (PROG & & &))
24*-1 2 p
((PrimValue &) NewValue hold)
25*pp
((PrimValue (UA-GETPROP uNIT sLOT))
 NewValue hold)
25*INIT

collecting lists
12865, 12865 free cells, 29 pages left
Initialized (PrimValue NewValue hold)
26*e PrimValue
NIL
26*e uNIT
Daddy
26*e sLOT
Possessions
26*p
((PrimValue &) NewValue hold)
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:12:57]
26*nx p
(DECLARE (LOCALVARS PrimValue NewValue hold))
27*nx p
(RETURN (AND & & & &))
28*2 p
(AND (OR & &) (OR & &) (OR & &) (COND & & &))
29*2 pp
(OR (InOther (QUOTE SAFEUNIT)
             oTHER44 NIL uNIT)
    (Unitp uNIT))
29*nx nx p
(OR (InOther & oTHER44 uNIT sLOT) (Fieldp fIELD))
31*nx p
(COND (& &) (& NIL) (T & & NewValue))
32*2 1 p
(AND (FormattedValuep PrimValue) (EQ & &))
33*eval
NIL
34*!nx 1 p
(OR (InOther & oTHER44 uNIT sLOT) (InOther & oTHER44 uNIT sLOT))
36*pp
(OR (InOther (QUOTE -COMPUTE)
             oTHER44 uNIT sLOT)
    (InOther (QUOTE -COMPUTE-FIELD)
             oTHER44 uNIT sLOT))
36*e oTHER44
(SAFESLOT)
36*eval
NIL
37*0 p
((OR & &) NIL)
38*nx p
(T (SETQ NewValue &) (OR & & &) NewValue)
39*2 p
(SETQ NewValue (APPLY* & uNIT sLOT &))
40*pp
(SETQ NewValue (APPLY* (OR (GetValue fIELD (QUOTE ToComputeField)
                                     (AddOnCharacter (GetSlotCharacter oTHER44)
                                                     (QUOTE SAFESLOT)
                                                     NIL))
                           (Warning "Trouble - unable to find " fIELD ":"
                                    (QUOTE ToComputeField)
                                    " - in "
                                    (QUOTE DefaultActualGetField)
                                    "."))
                       uNIT sLOT (AddOnCharacter oTHER44 (QUOTE SAFESLOT)
                                                 NIL)))
40*-1 2 p
(OR (GetValue fIELD & &) (Warning "Trouble - unable to find " fIELD ":" & " - in "
 & "."))
40*eval
DefaultFieldToCompute
41*!EF
Editting the function DefaultFieldToCompute
Unbreak DefaultFieldToCompute? no
loading from <GREINER.RLL>FIELD..7
DefaultFieldToCompute unbroken.
prop 
edit
42*p
(LAMBDA (uN sL fLD oth)   **COMMENT**   (DECLARE & &)   **COMMENT**   (OR & &))
-*-*- I have some advice on EDITF, which asked above if it should first unbreak
-*-*- the function.  Turns out it doesn't work: BREAK(fn)
-*-*- will NOT actually break the function is fn is being edited -- and no
-*-*- one seems to know how BREAK decides the function is being editted.
-*-*- Anyway, that same advice will be useful at the end of this edit, when
-*-*- it will ask to rebreak this function.
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:16:34]
-*-*- One more check, just to make sure everything opened ok:
42*e (MAPCAR UF.NETWORKS 'HASHFILEP]
(#171115 #171123 #171131 #171137 #171145 #171153)
-*-*-  Popping back up:
42*p
(LAMBDA (uN sL fLD oth)   **COMMENT**   (DECLARE & &)   **COMMENT**   (OR & &))
42*-1 p
(OR (MapUntilOk & &) (GetValue sL fLD oth))
43*2 p
(MapUntilOk (IsOk &) (FUNCTION &))
43*pp
[MapUntilOk (IsOk (GetValue uN (QUOTE OrderedPrototypes)
                            (AddOnCharacter (GetSlotCharacter oth)
                                            (QUOTE (SAFESLOT FAST-CACHE))
                                            T)))
            (FUNCTION (LAMBDA (x)
                (DECLARE (LOCALVARS x)
                         (SPECVARS sL fLD oth))
                (GetField x sL fLD (AddOnCharacter oth (QUOTE (-CreateSubUnit
                                                                -COMPUTE-FIELD))
                                                   T]
43*↑ 4 p
(DECLARE (LOCALVARS uN) (SPECVARS oth fLD sL))
-*-*- Damn, this looks legit!
45*f GetField
46*?=
uNIT = x
sLOT = sL
fLD = fLD
other35 = (AddOnCharacter oth (QUOTE (-CreateSubUnit -COMPUTE-FIELD)) T)
47*redo F

GetField  ?
48*ok
not changed, so not unsaved
Rebreak DefaultFieldToCompute? yes
DefaultFieldToCompute
49*p
(OR (GetValue fIELD & &) (Warning "Trouble - unable to find " fIELD ":" & " - in "
 & "."))
49*nx p
uNIT
50*0 p
(APPLY* (OR & &) uNIT sLOT (AddOnCharacter oTHER44 & NIL))
-*-*- Aha - I decided NOT to pass the field-name here - just the way
-*-*- S:ToCompute takes only 2 arguments...
51*NAME
DefaultGetField
51*ok
not changed, so not unsaved
45:EU TypicalSlot
edit
52*f ToComputeField
53*p
... ToComputeField (*Do* FExecute &) SuperTypEx* (TypicalThing 
TypicalConcreteThing TypicalProcess TypicalFunction TypicalStorableFn 
TypicalUnitFn TypicalSlot) AllIsas (AnySlot AnyUnitFunction AnyUnitListFn 
AnyStorableFn AnyFunction AnyProcess AnyConcreteThing Anything) MyAllIsas (
AnyTypicalExample AnyIntensionalObject AnyAbstractThing AnySelfAwareUnit AnyUnit
 AnyConcreteThing Anything) OrderedPrototypes (TypicalSlot TypicalUnitFn 
TypicalStorableFn TypicalFunction TypicalProcess TypicalConcreteThing 
TypicalThing) ToAddField DefaultAddField ToDeleteField DefaultDeleteField 
ToSubstField DefaultSubstField)
53*2 p
(*Do* FExecute (LAMBDA & &))
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:19:30]
54*pp
[*Do* FExecute (LAMBDA (un sl ot)
        `(LAMBDA (unt sl oth)
          (DefaultFieldToCompute unt sl (QUOTE ,un)
                                 oth]
-*-*- This is ok.  The fault must lie with VerifyAll itself.
54*ok
Nothing changed.
TypicalSlot
46:EU VerifyAll
You are about to write on an external file.
So far, this core image has been used by (GREINER).
Do you want to enter ReadOnly mode? no

collecting lists
17303, 17303 free cells, 29 pages left
edit
55*e uNoUnitPuts
NIL
-*-*- ↑ that's the variable used to decide whether the WS is pure.
55*f ToCom≠
=ToCompute
56*redo F
=ToComputeField
57*p
... ToComputeField DefaultFieldToCompute OrderedPrototypes (
TypicalComputableSlot TypicalSlot TypicalUnitFn TypicalStorableFn 
TypicalFunction TypicalProcess TypicalConcreteThing TypicalThing) AllIsas (
AnyComputableSlot AnySlot AnyUnitFunction AnyUnaryFunction AnyUnitListFn 
AnyStorableFn AnyFunction AnyProcess AnyConcreteThing Anything))
57*:
:
-*-*- This will be inherited henceforth.
59*SP
Verifying slots
Using UA-PUTPROP, not full PutValue
VerifyAll
48:?=
uNIT = Daddy
sLOT = Possessions
fIELD = VerifyAll
oTHER44 = (SAFESLOT)
49:eval

   (DefaultFieldToCompute broken)
50:?=
uN = Daddy
sL = Possessions
fLD = VerifyAll
oth = (SAFESLOT)
-*-*- Ah, now it looks right.
51:UB
(DefaultFieldToCompute)
52:eval
   DefaultFieldToCompute evaluated
53:value
[LAMBDA (un sl val sub xtr modif)
        (AND [AND (NOT (IGREATERP (LENGTH val)
                                  2))
                  (FIXP (CAR (NTH val 1)))
                  (FIXP (CAR (NTH val 2]
             modif]
-*-*- Ok - so it wants two values, both integers - as desired.
54:ok
DefaultFieldToCompute
DefaultGetField evaluated
54:value
[LAMBDA (un sl val sub xtr modif)
        (AND [AND (NOT (IGREATERP (LENGTH val)
                                  2))
                  (FIXP (CAR (NTH val 1)))
                  (FIXP (CAR (NTH val 2]
             modif]
55:UB
((DefaultGetField NOT BROKEN))
56:ok
DefaultGetField
NIL
-*-*- So it did NOT allow that PutValue of 3 values, as we wanted.
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:23:15]
56←EU Daddy
edit
60*PPU
Isa     (AnyPerson)
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        " 3-Oct-81 23:19:02"
MyCreatedAs     (ICopiedFrom (Momma))
Gender  Male
AllIsas (AnyPerson Anything)
OrderedPrototypes       (TypicalPerson TypicalThing)
61*; Yep - no value for Possessions.  Let's nw give him something.
61*OK
Nothing changed.
Daddy
57←(PutValue 'Daddy 'Possessions '(3 32]


-*-*- There was a minor bug here, fixed...
68:REEVAL DefaultFieldToCompute T

(DefaultFieldToCompute broken)
69:?=
uN = Daddy
sL = Possessions
fLD = Format
oth = (SAFESLOT SAFEFIELD -CreateSubUnit)
70:eval
DefaultFieldToCompute evaluated
71:value
FListN
-*-*- Ok - bug fixed.
72:UB
(DefaultFieldToCompute)
73:ok
DefaultFieldToCompute
(3 32)
-*-*- Now Daddy has some values
73←EU
=Daddy
edit
74*-2 up p
... Possessions (3 32))
-*-*- What did I tell you?
76*ok
Nothing changed.
Daddy
-*-*- All of this would have worked sans sub-units.  Onward and downward:
74←EU AnyPoorPerson
edit
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:33:04]
77*PPU
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        "29-Sep-81 21:46:27"
MyCreatedAs     (ISubClass (AnyPerson))
Isa     (AnyClassOfObjects)
TotalSoFar      0
SuperClass      (AnyPerson)
UnitExamples    (George TypicalPoorPerson)
TypicalExample  TypicalPoorPerson
SuperClass*     (AnyPoorPerson AnyPerson Anything)
-*-*- So George is Poor
78*-3 EU
Editting the unit TypicalPoorPerson.
edit
80*p
(Isa (AnyPoorPerson) TypicalExampleOf AnyPoorPerson MyIsa (AnyTypicalExample 
AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation "29-Sep-81 22:07:37" 
MyCreatedAs (CopiedFrom &) Possessions (*Do* FSeeUnit 
PossessionsOfTypicalPoorPerson) AllIsas (AnyPoorPerson AnyPerson Anything) 
SuperTypEx* (TypicalThing TypicalPerson TypicalPoorPerson) OrderedPrototypes (
TypicalPoorPerson TypicalPerson TypicalThing))
80*f Poss≠
=Possessions
81*2 p
(*Do* FSeeUnit PossessionsOfTypicalPoorPerson)
-*-*- Aha - a subunit!
82*3 EU
Editting the unit PossessionsOfTypicalPoorPerson.
edit
83*p
(RangeType (FSet IntegerType) MyIsa (AnySelfAwareUnit) MyCreator RussGreiner 
MyTimeOfCreation "30-Sep-81 16:07:59" MyCreatedAs (IExamples &) Isa (AnySubUnit)
 MyLivesInLocation (TypicalPoorPerson Possessions) MyAllIsas (AnySelfAwareUnit 
AnyUnit AnyConcreteThing Anything) Datatype (IntegerType) Format FSet --)
83*; Note the RangeType here is different - permitting a set of Integers.
83*PPU
RangeType       (FSet IntegerType)
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        "30-Sep-81 16:07:59"
MyCreatedAs     (IExamples (AnyUnitForSlot AnySlot))
Isa     (AnySubUnit)
MyLivesInLocation       (TypicalPoorPerson Possessions)
MyAllIsas       (AnySelfAwareUnit AnyUnit AnyConcreteThing Anything)
Datatype        (IntegerType)
Format  FSet
AllIsas (AnySubUnit AnyIntensionalObject AnyAbstractThing Anything)
87*SP
Verifying slots
Using UA-PUTPROP, not full PutValue
PossessionsOfTypicalPoorPerson
88*ok
Nothing changed.
TypicalPoorPerson
89*ok
Nothing changed.
AnyPoorPerson
75←EU George
edit
90*p
(MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation 
"29-Sep-81 22:25:05" MyCreatedAs (IExamples &) Isa (*Do* FSeeUnit IsaOfGeorge) 
OrderedPrototypes (TypicalPoorPerson TypicalPerson TypicalThing) Possessions (
*Do* FSeeUnit PossessionsOfGeorge))
90*-1 -1 p
PossessionsOfGeorge
91*EU
Editting the unit PossessionsOfGeorge.
edit
92*p
(MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation 
"11-Oct-81 15:47:39" MyCreatedAs (IExamples &) Isa (AnySubUnit) 
OrderedPrototypes (TypicalSubUnit TypicalAbstractThing TypicalThing) 
MyLivesInLocation (George Possessions) *vaLue* RecomputeMe AllIsas (AnySubUnit 
AnyIntensionalObject AnyAbstractThing Anything) MyAllIsas (AnySelfAwareUnit 
AnyUnit AnyConcreteThing Anything) --)
92*w
... Datatype NoEntries)
93*ok
Nothing changed.
PossessionsOfGeorge
94*ok
Nothing changed.
George
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:35:31]
-*-*- So George had a Possessions subunit already. Let's Kill that.
-*-*- (This was created when I was monkeying around, testing out this
-*-*- field stuff.)

-*-*- This may not work -- I've never tested this KillSubUnit stuff.
76←KillUnit(PossessionsOfGeorge]

-*-*- Another minor bug: found, fixed and eliminated
-*-*- (Basic change: LivesInXXX => MyLivesInXXX.)
77:BT
ERROR
*PROG*LAM
Warning
GetAccessFn
GetValue
DeleteSubUnit
KillUnit
**TOP**

-*-*- Note it did find DeleteSubUnit function.
78:EU TypicalSubUnit
edit
95*f MyToKill≠
=MyToKillMe
96*2 p
DeleteSubUnit
-*-*- There it is.
97*OK
Nothing changed.
TypicalSubUnit
79:REEVAL DeleteSubUnit T

(DeleteSubUnit broken)
80:UB
(DeleteSubUnit)
81:!EDIT
Editting the function: DeleteSubUnit
loading from <GREINER.RLL>FIELD..7

-*-*- Edits ommitted -*-*-
27*ok
unsaved
82:
(DeleteSubUnit broken)
82:?=
uNIt = PossessionsOfGeorge
83:eval


   *****   In SetSCFormer:ToCompute.   ***** 
Break?  yes
In SetSCFormer:ToCompute.
NIL

(ERROR broken)
-*-*- A remnamt from some earlier "fix".  Let's see what it was, shall we?
85:EUB
Editting the unit, SetSCFormer.

collecting lists
15703, 15703 free cells, 29 pages left
edit
-*-*- The EUB is "tied in" with the Warning function, which gave the message
-*-*- above.  So is the Posn usermacro:
28*Posn
In slot, ToCompute
(Warning "In " (QUOTE SetSCFormer) ":" (QUOTE ToCompute) ".")
-*-*- IE this is the place which spit out that message a few lines earlier.
-*-*- Below is left in, in case you want to peruse what one SC former looks like.
-*-*- If not, skip to "-*-*- HERE -*-*-"
29*0 p
(PROG (& & &) (DECLARE &) (Warning "In " & ":" & ".") (RETURN &))
30*-1 2 p
(REC-CREATE FS (ToCompute &) (RangeType &) (DomainType dom) (Description &))
30*3 2 p
(BACKQUOTEQ* (LAMBDA & & &))
30*-1 p
(LAMBDA (slotlist oth args) (SETQ slotlist &) (REC-CREATE FS & & & &))
30*-1 3 2 p
(BACKQUOTEQ* (LAMBDA ,',args &))
30*-1 pp
[LAMBDA ,',args
  (OR
    [,@
      (COND
        ((AND (EQ (CAR dom-from)
                  (QUOTE FListN))
              (EQLENGTH dom-from 3))
          (LIST (QUOTE N-ARY)))
        ((ListFormat (CAR dom-from))
          NIL)
        (T (Warning "What type of function has a format like " dom-from "? ")
           NIL))
      ,
      (CAR specs)
      ,,@
      (MAPCAR
        slotlist
        (FUNCTION (LAMBDA (slt)
            (DECLARE (LOCALVARS slt)
                     (SPECVARS args))
            ,
            (COND
              [(MEMB (QUOTE UseElementsOfArgs)
                     fc)
                `(BACKQUOTEQ* (IsOk (,, [FormatCoersion
                                          (QUOTE , (CAR (CADR dom-from)))
                                          (GetValue (-> slt (FS)
                                                        ToCompute)
                                                    (QUOTE Format)
                                                    (QUOTE (SAFESLOT]
                                        ,,
                                        (GetGetVal slt (-> args (SlotArgs)
                                                           UnitName)
                                                   (-> args (SlotArgs)
                                                       Others]
              (T `(BACKQUOTEQ* (IsOk ,, (GetGetVal slt (-> args (SlotArgs)
                                                           UnitName)
                                                   (-> args (SlotArgs)
                                                       Others]
    NoEntries]
30*!nx p
(RangeType (LIST & &))
31*2 pp
[LIST [QUOTE , (COND ((MEMB (QUOTE PreservesOrder)
                            fc)
                       (QUOTE FOrderedSet))
                     (T (QUOTE FSet]
      (, (COND
           ((MEMB (QUOTE OR)
                  fc)
             (QUOTE UnionDT))
           ((MEMB (QUOTE AND)
                  fc)
             (QUOTE IntersectDT))
           (T (Warning "In " (QUOTE SetSCFormer)
                       ":"
                       (QUOTE ToCompute)
                       "." "  - are you taking the OR junction, or the AND?")))
         (MAPCAR slotlist (FUNCTION (LAMBDA (slt)
                     (DECLARE (LOCALVARS slt))
                     (PROG ((rt (-> slt (FS)
                                    RangeType)))
                           (DECLARE (LOCALVARS rt))
                           (RETURN (SELECTQ (CAR rt)
                                            (FListN (CONS (QUOTE L-OR)
                                                          (CDR rt)))
                                            (CADR rt]
32*nx

NX  ?
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:44:09]
33*!nx p
(DomainType (BACKQUOTEQ* &))
34*-1 pp
`(FListN ,, (IntersectDT (MAPCAR slotlist (FUNCTION SingleArgOf)))
         UnrestrictedType)
35*; Ah yes, this was the fix.  Nothing to worry about.
35*; (This must be doing wonders at instilling confidence.  Oh well...)
...
35*TOS
-*-*- TOS put me at the top of the slot.
36*p
(LAMBDA (specs other args) (DECLARE &) (PROG & & & &))
36*f Warn≠
=Warning
37*p
(Warning "In " (QUOTE SetSCFormer) ":" (QUOTE ToCompute) ".")
37*:
-*-*- Just to remove it from future consideration.
-*-*- If not, skip to "-*-*- HERE -*-*-"
38*SP
Verifying slots
Using UA-PUTPROP, not full PutValue
86:RETURN
ERROR = NIL

-*-*- Here are 22 list garbage collections.  Throughout the Bumping facility
-*-*- has been working like a charm.
-*-*- But I was curious just what was happening, so I ↑Hed.

interrupted before RPLACD

(RPLACD broken)
87:NXBRK
(UA-GETPROP UA-PUTPROP UA-REMPROP)
-*-*- The NXBRK macro simply breaks those function above.
88:ok
RPLACD

(UA-GETPROP broken)
89:?=
$$UNIT = FnForUpdating
$$PROP = ToGetValue
90:BT
UA-GETPROP
GetAccessFn
GetValue
UpdateASUIB
*PROG*LAM
InvalidateEach
UpdateASUIB
COND
(LAMBDA (thisslot changedslot args hld) (* OR args &) (COND & & &))
APPLY*
COND
*PROG*LAM
PROG
(LAMBDA (suib) (DECLARE &) (PROG & & &))
MAPCAR
OR
*PROG*LAM
PROG
(LAMBDA (slt oth) (DECLARE & &) (PROG & & & &))
APPLY*
(LAMBDA (unt sl oth) (APPLY* & unt oth))
GetValue
PROG
(LAMBDA (slt oth) (DECLARE &) (PROG & & & & & & &))
DefaultActualGetValue
GetValue
DefaultAfterPutValue
DefaultInvalidateUnitFn
InvalidateValue
*PROG*LAM
*PROG*LAM
UpdateDepend
AND
(LAMBDA (uThisUnit uThisSlot new modif why) (AND & &))
DefaultAfterPutValue
*PROG*LAM
DefaultPutValue
PutValue
DefaultInvalidateSlot
InvalidateValue
*PROG*LAM
*PROG*LAM
UpdateDepend
AND
(LAMBDA (uThisUnit uThisSlot new modif why) (AND & &))
DefaultAfterPutValue
*PROG*LAM
DefaultPutValue
PutValue
CacheIfNonTrivial
CacheValue
DefaultActualGetValue
GetValue
EVAL
*PROG*LAM
*PROG*LAM
UpdateDepend
AND
(LAMBDA (uThisUnit uThisSlot new modif why) (AND & &))
DefaultAfterPutValue
*PROG*LAM
DefaultDeleteValue
DeleteValue
*PROG*LAM
*PROG*LAM
DeleteInverseLinksA0196
MapSlotsA0151
MAP2C
MapSlots
DeleteInverseLinks
DefaultDeleteThing
*PROG*LAM
PROG
DeleteSubUnit
KillUnit
KillUnit
**TOP**

-*-*- So a lot of things are going on.
-*-*- This gives me a chance to show off the BTFN macro
91:BTFN GetValue

   *ARG3 (SAFESLOT)
   *ARG2 FnForUpdating
   *ARG1 OneOf
GetValue

   *ARG3 (SAFESLOT)
   *ARG2 EffectedSlotsGen
   *ARG1 Prototypes
GetValue

   *ARG3 (SAFESLOT)
   *ARG2 KBUpdates
   *ARG1 Prototypes
GetValue

   *ARG3 (SAFESLOT)
   *ARG2 SuperClass*
   *ARG1 AnySubUnit
GetValue
**TOP**

92:BTFN HLDefnExpander
**TOP**

93:BTFN Invalid≠ Update≠
=UpdateASUIB

   gen-p Gen
   args (uThisUnit uThisSlot new modif why)

   changslt Prototypes
   hld (OneOf SuperClass* SuperTypEx* SuperSlot* GenlAct*)

   affectdst AllGenls
UpdateASUIB
=InvalidateEach

   *ARG5 Gen
   *ARG4 (uThisUnit uThisSlot new modif why)

   *ARG3 Prototypes
   *ARG2 (Unioning Prototypes (OneOf SuperClass* SuperTypEx* SuperSlot* 
                                     GenlAct*))

   *ARG1 AllGenls
InvalidateEach
=UpdateASUIB

   gen-p Gen
   args (uThisUnit uThisSlot new modif why)

   changslt Prototypes
   hld (Unioning Prototypes (OneOf SuperClass* SuperTypEx* SuperSlot* GenlAct*))

   affectdst AllGenls
UpdateASUIB
=InvalidateValue

   *ARG4 (-INVERSES (From MySensibleSlots MySS-Std MyPrototypes AllIsas 
                          SuperClass*)
                    -VERIFY)

   *ARG3 AllIsas
   *ARG2 Prototypes
   *ARG1 IsaOfGeorge
InvalidateValue
=UpdateDepend

   why (-INVERSES (From MySensibleSlots MySS-Std MyPrototypes AllIsas 
                        SuperClass*)
                  -VERIFY)

   *ARG5 (OldVal AnySubUnit AnyIntensionalObject AnyAbstractThing Anything)

   *ARG4 RecomputeMe
   uThisSlot AllIsas
   *ARG2 IsaOfGeorge
   *ARG1 ((MyPrototypes uThisUnit Invalidate1)
          (Prototypes uThisUnit Invalidate1))
UpdateDepend
=InvalidateValue

   *ARG4 ((From MySensibleSlots MySS-Std MyPrototypes AllIsas SuperClass*)
          -VERIFY)

   *ARG3 SuperClass*
   *ARG2 AllIsas
   *ARG1 IsaOfGeorge
InvalidateValue
=UpdateDepend

   why ((From MySensibleSlots MySS-Std MyPrototypes AllIsas SuperClass*)
        -VERIFY)

   *ARG5 (OldVal)
   *ARG4 (AnySubUnit AnyIntensionalObject AnyAbstractThing Anything)

   uThisSlot SuperClass*
   *ARG2 AnySubUnit
   *ARG1 ((MyAllIsas NIL Invalidate0)
          (AllIsas [LISTP (GetValue uThisUnit (QUOTE UnitExamples)
                                    (QUOTE (SAFESLOT]
                   InvalidateAll)
          (GenlsModels uThisUnit Invalidate1)
          (AllGenls uThisUnit Invalidate1))
UpdateDepend
=UpdateDepend

   why ((From UnitExamples)
        -VERIFY -INVERSES)

   *ARG5 (Delete1 . PossessionsOfGeorge)
   *ARG4 (IsaOfGeorge PossessionsOfTypicalPoorPerson TypicalSubUnit)

   uThisSlot UnitExamples
   *ARG2 AnySubUnit
   *ARG1 ((AllExamples [LISTP (GetValue uThisUnit (QUOTE SuperClass*)
                                        (QUOTE (SAFESLOT]
                       InvalidateAll))
UpdateDepend
**TOP**

-*-*- Well, everything's kosher.  The reason it's taking so long is because
-*-*- I was fooling around with that IsaOfGeorge subunit.  So there's
-*-*- a lot of new things it has to do, to handle this subunit.
-*-*- (A lot of the work above was done for RLL to understand the classes
-*-*- to which George belongs...)
94:UB

collecting lists
17041, 17041 free cells, 29 pages left
(UA-GETPROP)
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [12-Oct-81 11:53:33]
-*-*- By the way, if you suspect that units are NOT be bumped fast enough,
-*-*- the macro
95:BUMP
There are now 16 units `in core'.
"!DONE!"
-*-*- bumps units until there are fewer than 60 left.
-*-*- anyway
96:OK
UA-GETPROP

(UA-PUTPROP broken)
97:?=
$$UNIT = PutInOrder-C
$$PROP = FnForUpdating
$$VALUE = OrderingUpdating
98:UB
(UA-PUTPROP)
99:ok
UA-PUTPROP

(UA-REMPROP broken)
100:?=
$$UNIT = IsaOfGeorge
$$PROP = OrderedPrototypes
1:CHECK
Value of (UA-GETPROP 'IsaOfGeorge 'OrderedPrototypes) is
(TypicalSubUnit TypicalAbstractThing TypicalThing)
-*-*- This macro is pretty general, and fairly smart at finding the unit and slot
-*-*- to present.
2:ok
UA-REMPROP

(UA-REMPROP broken)
3:?=
$$UNIT = PossessionsOfTypicalPoorPerson
$$PROP = AllIsas
4:CHECK
Value of (UA-GETPROP 'PossessionsOfTypicalPoorPerson 'AllIsas) is
(AnySubUnit AnyIntensionalObject AnyAbstractThing Anything)
5:UB
(UA-REMPROP)
7:ok
UA-REMPROP

collecting lists
21216, 21216 free cells, 29 pages left

collecting atom name characters
1271, 1271 free cells, 29 pages left
Poof!
-*-*- it's gone - let's check, just to make sure:
8←EU
=SetSCFormer
edit
-*-*- Oops - not EU<cr> edits the previous unit. Anyway,
39*ok
Nothing changed.
SetSCFormer
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:57:36]
9←EU George
edit
40*f Isa
41*p
... Isa (*Do* FSeeUnit IsaOfGeorge) OrderedPrototypes (TypicalPoorPerson 
TypicalPerson TypicalThing) Possessions NoEntry)
-*-*- Currently no possessions, not a FSeeUnit.
41*ok
Nothing changed.
George
-*-*- to show the GetValue works, even "through" a subunit
10←GetValue(George Isa]
(AnyPoorPerson)
-*-*- Let's see how much faster this killing will be, once things are cached away:
11←KillUnit(IsaOfGeorge]
Poof!
-*-*- No GCs, it took only a few seconds.
12←EU
=George
edit
42*PPU
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        "29-Sep-81 22:25:05"
MyCreatedAs     (IExamples (AnyPoorPerson))
Isa     (AnyPoorPerson)
OrderedPrototypes       (TypicalPoorPerson TypicalPerson TypicalThing)
Possessions     NoEntry
-*-*- and he's still a poor person.
43*ok
Nothing changed.
George
13←; now to use a subunit:
13←PutValue(George Possessions (1 2 3 4 5]

collecting atom name characters
931, 931 free cells, 29 pages left
(1 2 3 4 5)
-*-*- Recall that would NOT have worked for Daddy.  The reason:
-*-*- the values were verified by
14←EU PossessionsOfTypicalPoorPerson
edit
44*p
(RangeType (FSet IntegerType) MyIsa (AnySelfAwareUnit) MyCreator RussGreiner 
MyTimeOfCreation "30-Sep-81 16:07:59" MyCreatedAs (IExamples &) Isa (AnySubUnit)
 MyLivesInLocation (TypicalPoorPerson Possessions) MyAllIsas (AnySelfAwareUnit 
AnyUnit AnyConcreteThing Anything) Datatype (IntegerType) Format FSet --)
44*w
... VerifyAll (LAMBDA & &))
45*-1 pp
[LAMBDA (un sl val sub xtr modif)
  (AND [COND
         ((ATOM val)
           (EQ val NoEntries))
         (T (PROG ((MACROX val))
                  (DECLARE (LOCALVARS MACROX))
              MAPCLP
                  (COND
                    ((NULL (LISTP MACROX))
                      (RETURN T))
                    ((NULL (FIXP (CAR MACROX)))
                      (RETURN)))
                  (SETQ MACROX (CDR MACROX))
                  (GO MAPCLP]
       modif]
-*-*- ↑ this function.
46*SP
Nothing changed.
PossessionsOfTypicalPoorPerson
-*-*- Now let's make poor people really poor.
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 12:02:17]
15←(PutField 'TypicalPoorPerson 'Possessions 'RangeType '(FListN IntegerType]

collecting lists
17420, 17420 free cells, 29 pages left

collecting lists
17797, 17797 free cells, 29 pages left

collecting atom name characters
1277, 1277 free cells, 29 pages left

collecting lists
18421, 18421 free cells, 29 pages left
The value of PossessionsOfTypicalPoorPerson:Format changed from FSet to FListN.
Shall I update all previously cached values, accordingly? no
(FListN IntegerType)
-*-*- Actually, I probably should have let it, as only George would have been
-*-*- effected.
16←EU George
edit
47*f Pos≠
=Possessions
48*p
... Possessions (1 2 3 4 5) AllIsas (AnyPoorPerson AnyPerson Anything))
48*:
49*:
50*SP
Verifying slots
-*-*- I deleted the value by hand, for safety.
Using UA-PUTPROP, not full PutValue
George
-*-*- Now let's try that same
17←PutValue(George Possessions (6 4 3]
NIL
-*-*- Note it didn't work, as desired.
18←fix 17
edit
51*-1 bk p
(George Possessions (6 4 3))
53*-1 p
(6 4 3)
54*(2)
55*(2)
56*ok
(6)
-*-*- Now what do you want to see?
-*-*- The addvalues, deletevalues, ... all work correspondingly.
19←SOS RUSS
Bye now.
(Just created the sysout <GREINER.RLL>RUSS.EXE.1)
It is now 12-Oct-81 12:07:11.
Closing DribbleFile <GREINER.RLL>TRACEA.OCT12.1
∂19-Oct-81  1345	Steve Klein <SKLEIN at USC-ISIB> 	Reincarnation   
To: RDG at SU-AI

Hi.  Sorry for this extreeeeemly long delay.  As is disgustingly typical, I
was buried under some other details around here.  I am, however, getting back
into the continuous RLL mode so things should pick up quickly.  Bill is now
very anxious for me to make something happen.  I've only done a first reading
of your opus dribble (when I first got it) so I won't comment on anything yet.
Reactions either later today, or tomorrow (looks neat, though)...
Steve.
-------

∂20-Oct-81  1813	Steve Klein <SKLEIN at USC-ISIB> 	murk (murf?)    
To: RDG at SU-AI

Owdy:

Well, I semi-digested your magnum opus...the thing that looks the most
"interesting" at the moment is the fact that slots and fields seem to
be entirely intermingled (TypicalSlot is a good example).  Although
I followed your prior argument about similarity of the two, it 
never-the-less seems strange.  
Some possibilities:  there is some clear distinguishing principle 
                        (currently unknown)
                     they are in reality identical 
                     both represent instances of some more fundamental
                        mechanism (yeech)

The second possibility would be interesting, but likely unreasonable.
Clearly, this doesn't matter much at the moment and probably only use
will provide answers, so what the hell...

I don't have any direct answers to any of the problems you raised, 
hopefully that will change later (or you'll solve them, hee hee).

I haven't implemented the modification-recording mechanism yet, partially
due to the state (until recently) of the modification and why parms.
Consequently, the only changes we have are the basic functional changes
contained in <MANCOM.RLL>ADDITIONS..    I don't know how you want to
handle incorporation/ftping/whatever, or whether you want to accept all
of the changes I've made...  Let me know tomorrow and we can hack out
the details on everything.  Actually, when you are in and free, I can
just give you a call, long-distance even being approved of hereabouts.

Steve.
-------

∂TO SKLEIN 11:48 21-Oct
Current, immediate status:
	LISP died a funny death last Sunday -- only ↑C worked, to get me
out of it.  Apparently some random thing happened to wedge the job, between
LISP and Rand-AI itself.  The net effect was that I lost about 3 1/2 hours
of work.  Fortunately I do have the dribble file from that -- unfortunately
that file requires 143 line printer pages to print out.  I'm now hoping to
return to where I was just-before-the-end of that session...  Grumble.

Anyway, yes, we should chat - perhaps later today.  I plan to be home
all day -- until about 7:45PM.  When shall I expect a call?  Maybe about 2:30?

----
Below are some comments/suggestions/warning:

1. In the "I can't believe I did it that way" category:
Recall our friend, FunctionSpec:  the (never cached) value of F:FunctionSpec
was a list of four arguments, (ToCompute RangeType DomainType ?).  The idea
was for those Domain and Range descriptions to help specify the function, stored
in the first position.  However they did not correspond: the DomainType for a 
slot was for two arguments, as these were all the arguments a slot, when viewed
as a function, can take (ie (Isa 'Steve '(SAFESLOT)), where that second 
argument is optional, permitting (ToCompute 'SuperClass*)).  
Before the recent change, that ToCompute function took 3 arguments!
It's now been fixed, basically
by twiddling the pertanent(sp) Slot Combiners, (actually by simply massaging
the yet even fewer SC Formers,) and putting a check in DefaultActualGetValue
which shouts if the S:ToCompute value is a function of more that two arguments.  
If and when it hollers, say Y to the "Break? " question, then use the EUB
BREAKMACRO (by typing EUB<cr> to the : prompt), then (FSlt ToCompute) to go
to the ToCompute slot; NX positions you on the offending value.

2.  MySensibleSlots has a new definition: Turns out those slots which make
sense for a subunit are both those which are well defined for subunits,
and those which
make sense for the unit which describes the slot which this subunit fills.
(EG there are two categories of legitimate slots for the PossessionsofGeorge
unit: slots which are defined for subunits in general, such as *vaLue* or 
MyLivesInUnit, and those which are defined for the slot Possessions,
such as HighLevelDefn, or RangeType.)
MySensibleSlots' definition knows about this now.
Anyway, I think this is done correctly; and that the few places which use
this value (c.f. IsaAPV) do the correct thing.  Still this is largely
untested.

3. The way of determining the RangeType of a function from its HighLevelDefn,
is much smarter now.  For things like Composition or Application, it will
use the range of one argument as the domain to the next in the cascade --
and the RangeType can now take this.  See the GetRangeApply function, and
(units representing) functions like MAPCAR for an illustration of this.

I should comment I'm not real happy about what those xxxRangeFn functions
are inside.  The current, slipshod implementation has them checking for
specific Formats, and handling each seperately.  Certainly they should,
at least, look at the format specs, and use these for their reasoning.
Maybe I'll worry about this later... maybe not.

4. I made a slight change to the case when there is no need to actually
perform a requested update -- 
eg when the user types PutValue(U S V) when the value of U:S is already V).
The ActualXXXValue routines (for XXX in Put, Add, Delete and Subst)
used to return the atom NoNeedToUpdate.
For subtle reasons, it became clear we had to return the value as well --
so now these routines return a list whose CAR is 
NoNeedToUpdate, and whose CDR is that vaue.


--- Undone ---

1) Have you made any headway in figuring how to record updates made
to the core KBs?  I haven't done anything on this since that initial
set of thoughts, way-back when.
A suggestion:  There is a way we can determine whether a PutValue is
being done at "top level" versus embedded in some hairy-mess:
this involves the /FNS.  These were designed to facilitate the undoing
commands, but I think we could exploit them for this purpose.

(Of course, on a seperate line, we could try to implement some undoing
capability, by ADVISEing UA-PUTPROP and UA-REMPROP in such a way that
they record how to undo them; and store this on some "slot" of the various
historical location.  Then we could undo a command by executing that list
of thing-to-do, to revert back to the state just prior to that instruction.
Of course, we would then have to worry about undo-ing that undo; and about
side effects of undoing user-command # 5 after performing commands 6 and 7.
I'll let you worry about it...)

2) The REEVAL breakmacro needs to be fixed.  Typing REEVAL fn,
where fn is NOT a function on the stack, sometimes hangs the job -
even ↑H and ↑Es are ineffective.  This uses a generator to walk along
the stack, trying to do spelling corretion.  What do you know about generators?

3) There are still a mess of Warnings strewn about 
-- especially wrt to ApplyToEach things.
I delayed working on that until after (I felt) fields were done satisfactorially.

---
Russ

∂24 Oct 1981 1834-PDT	<CSD.GREINER at SU-SCORE>	Abundance of trivia
To: sklein at USC-ISIB
cc: GREINER at RAND-AI

Well, I snarfed over (does "over" go with "snarf"?  probably not... anyway,)
your ADDITIONS file, and have incorporated much of it into various rll files -
in my current sysout.  The functions I did NOT absorb are:
	KB-Summary  - - do you really plan to type out hundreds of unit on 
		the terminal? 
	FoundIn	- - I think this is the same as a UNIT function, OccursIn.
	NewSpec - - There will eventually be an ISpec inheritance, which will
		use this function.  The NewSubClass function is the one which
		employs ISubClass.
	Up-Put1	- - I intensionally left a long string of names here.
	UsedInSlot - - Awfully expensive; and not used that often.  Actually,
		I do have something like this in DefaultRenameThing, I think.
	WHYFILE?  - - Various KB maintance routines should obviate the need for
		this -- as they ask where to store a function as that function
		is defined.  Use PUTDF instead of PUTD for this, by the way.
		[Nuts and bolts: this is done by a WHENCHANGED parameter
		 associated with FNS.]
-----

By the way, I added your fix into UP-BUMP; and things seem to work now.
I put RLL thru its paces, and I've not lost any pages in quite a while.
Thanks much.

Now my code, on the other hand...
I keep finding, and fixing, little bug-ettes.  I also want to test out one
more thing with FIELDs.  Then I'll close everything up, and pronounce it
all ready to ship.

-----
By the way, there is a on-trivial (but still semi-solvable) problem with
that \FNS proposal:  Much as I'd like to believe to the contrary, my functions
don't always work perfectedly.  When should happen when, say, a PutValue
(or some embedded/called subfunction) breaks during its execution; and the 
user then does some other KB modification?  How should that be annotated?

Perhaps on enterring a /PutValue that function could write something of the
form 
	(PutValue 'u 's 'v 'y
Note the absense of a closing ")".  That gets appended on the COMPLETION
of the associated PutValue.  Now any /UA-PUTPROPs, etc., will be present 
as extraneous arguments within that same form.  The casual user, 
when using this file to "update" his KBs, can simply ignore the side effects.
By reading in this file and executing each step, the UA-PUTPROPs (or whatever)
will be done before the "calling" PutValue -- which will usualy do the right
thing.  A more concerned user could do something else whenever a function has
too many arguments.  For example, the user may have "written" some other
information in that file, telling his follower what to do.  Perhaps the
\fn could do something like that -- eg storing BT in the file, or a pointer
to the location in the dribble file corresponding to this problem.
(This could be achieved by using a global variable, set by each of these
\fns to indicate their presence on the stack.)

Another point: we have to record GetValue's as well; as they might cache a
value.  (Either that or record each CacheValue!)
-----

There are many other improvements which should be done eventually to rll.
But, having adjusted my blinders, I'l delay them until you've a copy of
the working system to have and to hold.

Hooo!  (pronounced "hoe", over a many second interval, giving it a 
rounded sound...)

Russ
-------

∂25 Oct 1981 1345-PST	<GREINER>	One more thing:
To: sklein at USC-ISIB
cc: greiNER

I also did NOT save FindFn.  If these are functions you use with great frequency
you can store them on some central KB's associated LISP file; so they will
be loaded in each time you enter a RLL session.  (Either that or convince me
they serve some major function needed in general.)
	That's all for now.
Russ
-------

∂26 Oct 1981 1547-PST	<GREINER>	Delays, delays, delays...
To: sklein at USC-ISIB
cc: greiner

Somewhere between spoon and lip ... the changes I made to FIELD.KB have 
disappeared!   I mentioned that LISP was acting funny these last few days;
apparently this is an old potentially-buggy version, Keith now tells me.
Anyway, I now know how to use the more recent version, and will do so.

For now, I will RETRIEVE my last version from back up tape, and see how much
that includes.  Grrr...

Anyway, the answer to your "when?" question remains, I afraid, "soon".

Russ
-------


∂ 1 Nov 1981 1241-PST	<GREINER>	Come and get it!
To: sklein at USC-ISIB
cc: greiNER

Finally, at long last, Glory-Be!  The various files on <GREINER.RLL> and
<GREINER.CORLL> are now at your disposal.  Hurry and gobble them up before
I decide to make a simple, innocuous change...

Still no guarantees that everything'll work when you try it, but I did a small
amount of experimentation and everything behaved as desired.

Issues:  UA-GETPROP didn't work a few times.  Examining it showed a glaring
error Dave made months ago which, until bumping worked correctly, just
never happened to happen.  (Basically there's an interval in UA-GET between
when the contents of the unit have been read in, and some field of the
unit's overhead structure is set which is NOT in a critical region.  Now that
bumping happens more often, a unit just being read in might be swapped out.
This causes the unit's value to be NIL, causing a "Trying to RPLACA NIL" error.
The fact that this never happened before is impressive.)  Anyway, I think
I fixed this problem.  (During that fix I found that Dave's UP-NOBUMP also
has an obvious mistake: it used a PROG2 rather than a PROG1.  That too
has been fixed.)  The moral here is that CORLL may be much hole-ier than I
thought; and that we should be careful when repairing it -- just because
it's worked for quite a while doesn't mean all of its bugs are out.
(Especially when the error lies in things like MACROs, which haven't been
really used for eons.)

Of course the same is true for RLL as well, in spades.  But you know that.

Next: until those /PutValue, ... functions are done I guess I'll send
you my dribble files?  The other possibility is for you to keep your
deltas recorded somewhere, allowing you to simply snarf the next RLL release,
then run you increments to it.  Or is there some other possiblity?

My agenda: the time has come to get MACROs to work... The proportion of
my RLL time spent terminal watching rather than coding is non-trivial.
Besides it's time to make good my claim that this is about to work...
I did want you to have a working system first, though.

-----
Anyway, how're things in general there?  Not much here, besides a recent 
rash of mouth sores.  (This happens several times a year, for mysterious
and unpredictable (to me at least) reasons.)  Thesis is sorta advancing;
Rand's stuff has been relegated to the bottom of the stack -- even
below recreational reading:  I'm finally finishing up a book I started
over a year ago: "Chimera" by John Barth.  'Tis quite good.
-----
Onto macros! Charge...
	Russ
-------
-------

∂ 3 Nov 1981 1822-PST	<SKLEIN at USC-ISIB>	Re: Come and get it!
To: GREINER at RAND-AI

Always delays...our consultant from Australia showed up for a week or two,
so things have been more hectic than usual.  I'll snarf over the fruits
of your labor after I finish this msg.  Seems easiest to just grab new
versions until the recording stuff is done.  My plans are to try stuffing
things in over the next two weeks or so.  Should also get some version of
the /fns done over the same span.  Hopefully there won't be any hitches
(ha) since Bill is a bit reluctant for me (or anyone) to get "sidetracked".
I'll hop on the phone forth haste if I see anything strange going on.

I/we (parents) put in a bid on a house in Woodland Hills a few days ago...
shall see whether anything useful comes of it.  I think I read my first trash
novel in about 8 months yesterday...was probably because I didn't want to do
any work, rather than extra available time.  I've been oscillating in
semi-full/semi-parttime student status at ISI for a while, will probably go on
real-status (= staff) soon.  I think I'm "setting aside" UCLA for the near
future.  Now comes the fun part of haggling over salary, etc.--beats me what I
should ask for / expect...

Bleep-Deep.
-------
-------

∂06-Nov-81  1710	Steve Klein <SKLEIN at USC-ISIB> 	hmm...

Russ-- 
Greets.  I seem to be having a problem in bringing up a new RLL.  Briefly, I
can (seemingly) make a CORLL sysout fine, but in executing START, things croak
before getting very far.  The warning in Up-Put1 gets activated.  On the first
time through the advice to UP-PUT is being removed (I checked), but SOMEHOW
that same advice is being used again (and Up-Put1 is called a second time).
If I load in an OLD copy of UP-PUT, the problem doesn't occur.  I tried to
load a new copy (from CORLL..320) but get END OF FILE errors...do you get any
of these / know of something that might have gone wrong?
Steve.
-------

∂ 7 Nov 1981 2053-PST	<GREINER>	CORLL
To: sklein at USC-ISIB
cc: greiNER

Yea, turns out my CORLL here was broken also... I just never got to a
bump, and so didn't notice.  It appears that LISP buggered it in some
really funny way, as all of the parentheses match as best I can tell.

Anyway, using EMACS, and READ, RATOM, and re-LOADing the file, I did
manage to construct (what I think is) a working version of CORLL.. and
CORLL.COM.  At least the BUMP problem doesn't appear with it, and all
of the functions appear to be present.  (Yes, my fingers are indeed crossed.)
(By the way, I thought the ↑Js in the file were the culprits, but that's
apparently not the case... it all works now, even with them.)

As Rand-Ai will be down all day tomorrow, I took the liberty of depositing
those corrected versions over onto ISIB.  Enjoy.

Two side (EMACS) questions:
EMACS does have a command for finding the balancing parethesis,
counting "(" and ")"s.  Is there any way to teach it about "[" and "]"s?
Better, how hard would it be to write a little macro which did the conversion?

Next: how does one go about scanning for ↑Js?  Typing ↑S↑Q↑J is not sufficient:
this seems to locate carriage returns (or something like that.)
Typing another ↑J at this point DOES seem to work.  Why?  Am I really telling
EMACS to scan for any <CR>↑J ?  Note ↑S↑J only finds the <CR>s, I think.

Going on, how do I replace ↑J with ""?  <esc>%↑Q↑Q↑Q↑J<esc><esc>  found only
one, then stopped.  
---- These aren't big things, just idle curiousity, of course. ----

Good luck on house-buying.  Hi-oh-Thesis, away...
	Russ
-------

∂ 8 Nov 1981 1644-PST	<GREINER>	Minor bug
To: sklein at USC-ISIB
cc: greiNER

It appears EVALV works in funny ways -- or at least in some manner which
I don't understand.  Anyway, the ChangedFn function will, on occasion,
not work because (EVALV KBfns) returns NIL rather than the list it should.
Anyway, you've been warned.  (The effect is variables like RLLFNS get
reset to be a singleton list, confusing the LOADFNS routines (called by
EDITF) no end.)  Next iteration will have a safer, if slower, EVAL.

Back to macro-izing.
	Russ
-------

∂ 9 Nov 1981 1652-PST	<SKLEIN at USC-ISIB>	problem resolved
To: Greiner at RAND-AI

Hi.  Problem with missing InOther was a bit more drastic than either of
us assumed, but easier to fix.  Turns out to be due to file versions.
I snarfed over your new files with the retain option, however, the newest
version of RLL.. had a lower version number than the version I had from
the previous time, so that older version was the one that got loaded in.
We have found it beneficial (not to seem prescriptive) to keep com file
versions the same as that of their symbolic source...thus this generally
doesn't happen.  If you think that might be useful, I won't complain, otherwise
I'll just be more careful in bringing stuff over...
-------

∂10 Nov 1981 1801-PST	<CSD.GREINER at SU-SCORE>	Macros, etc
To: sklein at USC-ISIB
cc: greiner at RAND-AI

Steve -

Well, here's the description I promised.  Consider the function
(DEFINEQ (FOO  (x) 
	...  (GetValue x 'AllIsas '(SAFESLOT)) ... ))

As FOO is compiled, the GetValue macro expands.  The macro is pretty simple:
Unless the slot (ie its second argument) is quoted, nothing happens.
(IE the macro returns IGNOREMACRO.)
Otherwise the macro looks up the value of that slot's ToGetValue --
in this case DefaultActualGetValue = AllIsas:ToGetValue.
This value is then substituted for the original GetValue call -- hence the
compiled FOO looks like

(DEFINEQ (FOO  (x) 
	...  (DefaultActualGetValue x 'AllIsas '(SAFESLOT)) ... ))

The work is not done yet -- we have to record that the value of
AllIsas:ToGetValue has been used.  This is stored on the GetValue unit,
on its MacroUsedIn slot.  (See the MarkMacroUse function.  Advise to
COMPILE1 is used to pass the (name of the) function being compiled.)

Suppose we new reset AllIsas:ToGetValue.  The existing mechanism, used for
doing the standard KB modifications when any slot's value is changed,
is to execute the KBUpdates slot of affected slot, here ToGetValue.
I'll describe that function's creation in a moment.  The salient feature,
at this point, is that it knows to go to the GetValue:MacrosUsedIn value,
which stores those functions which used AllIsas:ToGetValue.  Each of those
functions is "invalidated".  This is pretty straightforward: if the function
is currently compiled code, (ie if CCODEP(fn) is nonNIL,) its source code
replaces that functional definition (using LOADFNS).  If it is currently
"loaded" but not compiled, nothing is done.   Otherwise the name of this
function is stored on a global variable, ToBeUnCompiledFns.

(Advise to LOAD will use that variable: LOAD will now recompile any
function which is on that list before "admitting" it into the working system.)

----
Before embellishing this macro description, I wanted to elaborate this
KBUpdates slot.  In particular, nothing new had to be added to its definition:
The only change was on TypicalLISPFn:FnForInvalidating and 
TypicalLISPFn:ToInvalidateValue, which GetValue will "inherit".

Nuts and bolts: The KBUpdates function will, of course, be given a
bunch of arguments, including the name of the slot which was alterred
(here ToGetValue), on which unit (here AllIsas), the function whose
macro should now be invalidated: GetValue, and the function in which
this macro was expanded - FOO.
Anyway, as KBUpdates:ToCompute shows, x:KBUpdates is generated using each
of the functions which use the cached value of ToGetValue -- listing the
value of each of their (respective) FnForInvalidating (?) slots.
Anyway, GetValue is on ToGetValue:CVUsedBy, and so the processing which
constructs this ToGetValue:KBUpdates will know to generate which,
in this case, invalidates FOO.
<pause to catch breath>

----
There are, of course, similar macros for PutValue, AddValue, DeleteValue 
and SubstValue.
Eventually I'll macro-ize the various get-value functions 
(respectively putting-value functions) -- so
DefaultActualGetValue, PrimGetValue, etc., will be able to using things
like the Format of the slot used, or it ToCacheValue value.
As with ToGetValue, if ever s:Format is changed, the compiled version, 
which relied on that value, will
be thrown out, and the still accurate source code will take over.

The value of x:MacrosUsedIn, by the way, is of the form
	( ... (access-slot (slot1 fn1 fn2 ...) (slot2 fnN ...)) ...)
eg the value of GetValue:MacrosUsedIn, after FOO was compiled, is
	( (ToGetValue (AllIsas FOO)) ).

----
Remaining problems:

What if FOO is editted, and the call to (GetValue x 'AllIsas ...) is removed?
How do I know to go to the GetValue unit, and adjust its MacrosUsedIn slot?
The obvious possibility is to throw out all record of FOO's embedded 
macros each time FOO is compiled -- assuming they are re-inserted as 
needed during the GetValue-macro-expansion.
The problem with this is how to store these inverse links.  Certainly if
each such function is a macro we could establish a contain-macro slot,
containing comparable information to the MacrosUsedIn value.
However few of the functions have yet been unitized.  Perhaps this provides
the incentive to do that?

Anyway, the current implementation makes the fallacious claim that
"once a macro is defined in a function, it will always be present".
Eventually I'll fix this up.

Another problem is how to maintain that ToBeUnCompiledFns variable across
systems -- what if you get the list from my current system (included in
my UTIL file), but not the corresponding units -- in LISPFNS.KB?
One possible solution involves storing the list of to-be-invalidated
functions (eg FOO, if FOO wasn't around when AllIsas:ToGetValue was changed,)
on the unit representing the macro - here GetValue.  This would slow down
loading -- as a pre-processing step would have to first walk thru each
of these macro-units assembling the ToBeUnCompiledFns list.
Argh...


The final worry I have is actually a problem which (I realize now) might
erupt in other places as well.  It deals with "race conditions".
After we change, say AllIsas:ToGetValue, it'll take a while before
the various functions are actually updated.  Until then, they are
still using that old value.  What if one of these functions was in fact
used in computing KBUpdates, or some other application.  
This probably won't be much of a problem, as there are only a handful
of such functions.  

A related worry returns to Garden-of-Eden considerations:  We can
now define the GetValue function as
(LAMBDA (un sl ot) (APPLY* (GetValue sl 'ToGetValue '(SAFESLOT))
			   un sl ot)),
sorta.  When compiled, that GetValue will "expand" into GetAccessFn
(as that's the value of ToGetValue:ToGetValue).  So the compiled
version of this function works perfectly -- it's the source code
which will infinite-loop.  Now suppose someone was silly enough to
alter ToGetValue:ToGetValue.  One side effect would be to "invalidate"
the GetValue function -- rendering it inoperative (in the worst possible
way).  Of course one could define invalidation as recompiling-the-source-code.
This still does not totally solve the problem: recall that some GetValue's
occur during the compilation -- look at the GetValue macro, and that 
MarkMacroUse function.  If these calls are interpreted, we're in trouble.
(Of course we might have to compile them, and then insist that at all
times at least one of {it, GetValue} be compiled.  What a hassle...
A simpler solution might be to insist that ToGetValue have its own associated
functions - like KBUpdates, which do special things.  These are just things
to keep you awake late at night.
(By the way, a vaguely similar logic forces us to keep Unitp compiled --
run interpretively it calls a macro, which in turn invokes the FAULTEVAL
function, which (thru RLL's hack to the interpreter) calls Unitp, and so
we go.)

Fortunately, I don't think such updates will be very common; making 
inter-system incompatibilities yet ever rarer.  Just things to think
about.


-----
-----
Other things:
1) I keep getting a BLKAPPLY error during calls to MAPHASHFILE, within
UA-LIST and CompressMe? (and more recently, within UF-COPY).  I've just
REEVAL UA-LIST T (or whatever function) out of it, and continues this
until it runs to completion.  I've no idea what causes it; and may one
day look into it.  Bletch.

2) Is there anyway of making GLOBALVARS statements "permanent"?  
It seems that when I compile UTIL, the compiler has forgotten about
the Global declarations made in CORLL, for example.  Perhaps I need
a LOADCOMP statement, in some DO@COMPILE?  Ideas?

3) I found Doug's code for "quiet" compiling.  Turns out it uses COMPILE1,
plus only a few variables.  I'll send you the code if you're interested.

4) Thanks for BKSYSBUF (or whatever).  CORLLINIT now uses it.

----
Time to go home,
	Russ
-------
-------

∂12-Nov-81  1515	Steve Klein <SKLEIN at USC-ISIB> 	oozing onwards  
∂TO SKLEIN 14:08 14-Nov-81
Slurp, slurp
Steve -
(I intersperced(sp) my suggestions in amongst your questions.)
    Hi.  Waz nu?  Some minor questions... What was your fix to UA-GETPROP so it
    didn't blowup occasionally?  
I didn't change UA-GETPROP.
The bug I removed was from UA-GET -- it's RPLACs are now in
a critical region, where they belong.
Beyond that I don't know why UA-GETPROP blows up.
Nothing in UA-GETPROP does a RPLAC on that unit.
    Still seems to, and effectively consists of a
    LISTGET of a UA-GET, hence what keeps the unit from evaporating between the
    calls?  
I don't understand.  So what if a unit is paged out, the value of UA-GET
should still be that plist...
    Also, in general, what keeps the result of a unit access from 
    evaporating when the unit is paged out if that result is non-atomic?
The RPLAC is on the PList, not on the value of a given slot.  The only funny
case will when there are currently no properties; and I think that is handled
correctly.
    Also, it seems that creating a new user unit doesn't quite work...something
    in the process of initializing the unit decides that the user doesn't exist
    and so starts the process over again.  Of course, saying no to the second
    attempt makes things work (I think), but doesn't look very nice.
Huh?  I need more details... What doesn't work? when, where, ...
I tried creating a new SteveKlein unit, from WhoIsUser; and everything
worked perfectly.
    I would like to make an initial stab at ordering the slots of each unit at
    printout...the first thought that comes to mind is a three-way partition
    of slots into Primitive, Computable, and Syntactic (printed in that order).
    The current problems I see with that are as follows:

      -  not totally satisfactory (but ok for now, unless you see something better)
      -  a bit harsh computationally unless something constructs a (temporary?) 
	   list of each type of slot...bleh.
      -  not exhaustive...for example, the unit FnForGetting  isa
	   AnyInheritableSlot, but not Computable or Primitive...it would seem
	   to me that Computable and Primitive should span all slots: Inheritable,
	   Specializable, and whatever are independent axes.
Why not a mechanism like OrderForToInit, where everything which is a primitive
slot inherits the value (I think) 20, inheritable slots about 50 and computable
slots, 70.  Any particular slot can override this defaulted value by storing
its own value.  Furthermore, if ever you create a new category of slots,
you can assign the default value for those slot's order-for-print by simply
storing that value in TypicalxxxSlot:OrderForPrint, or whatever.

The printer could then order the slots to be presented using these values.
A further embellishment would be to consider any negative value (for example) 
to mean "don't even print me".

    I'll keep on digesting and poking...let me know what you think.
Let me know what happens.

Just about nothing on the NEWs-front --
I'm still macro-ing; and should have this all tested soon.

	Russ
∂TO SKLEIN@ISIB (CC LENAT@PARC) 23:39 3-Dec
Salutations
Steve -
	What's happening there?  Haven't heard from you for a while...
and I refuse to believe it's because everything (or even, anything)
is working correctly...

	I've been thesising, and haven't done any RLL things for a few weeks
(?either?).  My status with Rand is tenuous -- in case the grapevine
hasn't passed along this information: Rick quit/was fired/left.  But
I'm talking with his replacement (Gary Martins), who may still want
me there now and again.  I did indicate a desire to work occasionally
(more like once a month than once a week).  We'll see.  As long I can
keep access to Rand-Ai.

	Hope everything's going well with you in general (esp wrt house
buying/hunting, and Sandy, etc.)  Let me know also about your hacking
status -- ie has RLL been abandoned to a "well it was a good idea but"
status, or what.

	Take care,
Russ

∂04-Dec-81  1133	Steve Klein <SKLEIN at USC-ISIB> 	Re: Salutations      
To: RDG at SU-AI

Hi.  Congrats on your thesis coming along (looking at things that way you
might be able to find advantages to current Rand turmoil...).  No, we haven't
abandoned RLL, but rather a hefty dose of visitor-types has caused other
things (like keeping the current level of our system healthy and growing) to
be pushed to the fore...I usually get the dirty work.  Additionally, I managed
to (finally) get the current version of world-wide plague which effectively
killed things for a week (until today).  Disgusting...amazingly hard to get
anything done.  Since the MAJOR stumbling block in our plans is the state of
our KR, pushing on RLL has been repromoted to the top of the heap.  Hopefully,
the number of diversions in the next month will be VERY small so I can
actually accomplish something.  I'll let you know of the real state in a few
days when I get back up to speed again...  The world is otherwise going
normally (locally, that is...the rest of the world is obviously going to
shit).  I hope to be done with house stuff quite quickly, mainly because it
seems to be getting very boring.  Heard any nasty Reagan jokes lately?  
Steve.
-------

∂TO SKLEIN@ISIB 12:01 22-Dec
Hola!  Que tal?
Steve -
	How're things going these days?  Housing, and Hanukahing, and hassling,
and harumphing, and ...  [those are helipses, of course]?  Any newnesses to
RLL from that end?  Questions/comments/threats?

	Note much happening here.  I gave copies of my thesis proposal to
several profs three weeks ago, and have been waiting for comments ever since.
Very frustrating; as I suspect they will suggest/enforce non-trivial modifications;
and I'd rather not have to undo a bunch of stuff done now (that is, prematurely).
So I've been reading philosophical this and thats.  yawn.

	Housemate Ben will be trekking there circa Xmas day.  Any messages for
him?  Like to guide him about ISI if he drops by?
By the way, an incomplete subset of his stats are 
	Ben Moszkowski
  (213) 477-2105 -- [Mother ?Leona?] ?, Los Angeles, CA 900??
  ?		 -- [Father] 2567 S. Barryton Ave, Los Angeles, CA  90064

----
Anyway, let me know what's happening.
	Russ

∂23-Dec-81  1659	Steve Klein <SKLEIN at USC-ISIB> 	murkiness  
To: RDG at SU-AI

Hi.  Don't give up...we're still alive here.  It never ceases to amaze
me how easy it is to be in continuous imminent crisis mode.  The latest
has been trying to use up the money remaining in this budget period
by buying a small VAX.  Each one of these things causes the amount of
time I get to devote to RLL to fluctuate wildly.  Believe it or not, it
is still looked on with favor hereabouts.  I'll give you a call on
Monday (assuming you will be there then) to discuss the list of questions
that I have been accumulating...
Steve.
-------

∂TO SKLEIN at USC-ISIB 16:52 24-Dec
Fire away
Ok.  I will be in Palo Alto this Monday.
I'm meandering south (to Costa Mesa) for a small part of the winter:
from 1-Jan thru 5-Jan. 
[Core reason: my father's getting married on the 3rd.]

Anyway, feel free to send a list of questions, if you want me to do any
pre-processing.  Talk with you soon,
	Russ

By the way, I took the liberty of cluttering up MANCOM.RLL will a few more files,
to facilitate my eavesdropping.
∂TO SKLEIN@ISIB 16:24 29-Dec-81
How to enforce restrictions of ranges on sub-units:
Example:  Suppose we have 

Cost
   Isa:			(AnyComplexSlot)
   RangeType:		(FSingleton (IntegerType (*R 0 100)))
   MakesSenseFor:	(TypicalPhysicalObject)

that is, the value of U:Cost will be a single value which can range
from 0 to 100.  (Later we will further complicate this...)

Wanting to restrict the allowed cost for ships, we create 

CostOfTypicalShip
   MyLivesInSlot:	Cost
   MyLivesInUnit:	TypicalShip
   RangeType:		(FSingleton (IntegerType (*R 15 82)))

All well and good.  Given Ship#47 which Isa AnyShip, 
	(PutValue 'Ship#47 'Cost 13)
will blow-up:
It will call Cost:BeforePutValue, which will (eventually) call
ComplexBPV (because Cost is a complex slot).  
This, in turn, knows to check the OrderedPrototypes of Ship#47,
seeing if any of them has information to use -- ie if, for any 
u in Ship#47:OrderedPrototypes, there is a field u:Cost:VerifyValue.
And indeed there is -- the RangeType of CostOfTypicalShip is sufficient
to produce a CostOfTypicalShip:VerifyValue.  This function will reject
the value 13; causing the overall PutValue will fail.  (Yea!)

So far nothing new.  The problem is that nothing checks that
CostOfTypicalShip:RangeType bears any relation to Cost:RangeType.
For example, nothing prevents us from putting something like
	(FListN (UnitType (*P AnyFrog)) BooleanType)
on that slot's value.
So here's the problem: what should check that the value of
CostOfTypicalShip:RangeType is a restriction of Cost:RangeType, and how?

Well, what checks the value of a slot in general?  By convention, the
value of U:S is verified by S:VerifyValue -- hence we have to elaborate
RangeType:VerifyType.  
This (distributed) function should do one of two things:
If the unit involved is a subunit, as CostOfTypicalShip is, it should
do some complex checking, to insure that this current value is indeed
a restriction -- more on this in a moment.  Otherwise, it should just
do whatever it now does.

Turns out this is very easy to implement, thanks to our sub-unit friends.
The trick is to make VerifyValue a complex slot (if it's not already);
and to store that complicated stuff on TypicalSubUnit:RangeType:VerifyValue
(that is, on the VerifyValue slot of the RangeTypeOfTypicalSubUnit subunit).

Now when verifying the value of RangeType for a given unit,
ComplexBPV will be called, and given the unit, u [here, CostOfTypicalShip],
among other things.
It will try to find the VerifyValue FIELD of some v:RangeType subunit, where
v iq a Prototype od u.
Hence, to find the VerifyValue acSociated with CoqtOfTypicalShip:RangeType,
it will (eventually) see if TypicalSubUniT has a RangeType subunit
on which a VerifyValue has been stored.
So storing that complicatedstuff here will mean that this procedure will be
called to checK the value stored iNto the RangeType of any subunit.

Note that, foR general Non-subuniT uniTs, no such fieLd will intercePt
αCOmplex@PV on its que@MhAM←HAju%¬]OK)eaJu-∃aSMsYCYkJ0AoQS
PA[K¬]fASPAoSY0~∃eKQkeLAQQJAm¬YkJA=H	αK∞s∨⊗SOβ∃j[,ε&N7~l⊗g.UDπ>F≤=αεO4
FF*:W↔⊗]nBα⊗L\f∂.ND"π6≥NV+XQ,↔~εL↑6O⊗\A`hPQ*FF∂D}2εF≥Lbπ&Tε⊗∂NMF*R∧	f␈:∞Mrε&\8
,L(≥z≡λ≥≠d∞⎇_<m∧≠{C!*≡<~,<;∀⎇,*;Z0~∞+2y4Y<k0v≥rW⊂⊂∃44yP→:w1j~ww⊂;Zv6⊂:_urP0H32{P_y3yVλ0rww→FE:4→vP:4→P:w4]⊂⊗VP~2y2P⊂wyz'YαTypIcalShip.  It's now Pretty straightforward
αto find the units whiCh thiq should @	JABAIKgie%GiS←8AWL@4ZAQKIJAπ←Mh\~∀!∪\AO∃]KeC0AiQ←MJAk]%ifAo%YPAS9GYkI∀A≥∨(↓≠≥→2↓iQJAYCYkJ↓←LAji≠s→SYKg∪]MY←hX4∃Ekh↓C]rA5K[EKI`
β?2βUj7Lc'[↔≤K:W;M!↓##/∪∃αSOβ'∂πe≠#'AJ↓∨Mα∨+C↔J'KB↔a?→84*>)∨31ε#'O∂/≠MβSFKMβ7␈∪∃β∨.s↔Kπbβ∂πO*β¬βO!β3π&+I9$hP4*SF)βSKN≠%β;⎇9β'Mπ#=β≠Ns⊃β←FQβSFK;∨Mε≠π9β⊗)β¬β⊗+OSKN≠S'?rβ?→β
βCπ≠>(4+Oε+∂'≠L≠πS'}q9↓α&C∃βπw≠←↔I∧KEβSzβ3↔Q∧εFF*∞>ε.≡≤m⊗≡∂M≥vrε≡N6.fdF.≡≤LSPH(LV&NlTε
εlX
d∞{≠u¬D≤⎇0m∧_<h
><→4J>→8qMeHλ∃
(≥X-N9(≠l@⊂#)d[3v2z≠w≥)z\2y)x→qc7εB9tv6λ0P3*[1z4g[⊗⊂#)N)ic⊗λ;t4`#h takes narguMents, afd↓aKikβ∪;Mα β'	β&C∃β≠M∪OP4VK∨Wn+;QβM→β¬β⊗+OSKN≠S'?pβ?→β&C∃βK.kπ'm_LT≠K$%A R0↔λ:44yH1pp∪@∀A
&uM'Ao%YP⊃β&/∃↓D2O'≠>c↔S?p↓"'≠&+∨/*O↔ε*¬↓%∩β⊗TβC∩∃∃∩ε6}!PVOL4ε&O.8
∧<Y⎇-\8π:⊗λ0s2 (@
'S9OYKi=\@Q∪9iKOKI)saJPU$@@@b``$RRAMα{@∩ε≡N2π≡\8mlC"AQS[p~~w3P*~0z⊂ 4hese dh∂e[¬ifA[¬iGPX↓
&u'MAoS1XAGQ∃GVAi!Ch@Q%]aKOestriction of (IntegerType (*R 0 100)).  It does this by calling
the SuperSpecFn of the datatype IntegerType, IT:SSF.  This function, again,
takes n arguments, and returns T if the first is indeed a restriction of
the other.  Here, it sees the args (IntegerType (*R 15 82)) and 
(IntegerType (*R 15 82)).  IT:SSF observes that the datatypes match,
and now needs to see whether (*R 15 82) is a subrange of (*R 0 100).
Needless to say, it now calls *R:SuperSpecFn, and hands it 
(*R 15 82) and (*R 0 100).  Finally an end to the recurring.  This
function notes that the range-specs (*R and *R) match, and so checks
the args - and as 15≥0 and 82≤100, *R:SSF returns T.
This affirmation is propogated up the calls, and (eventually) is used to
indicate that 
	(FSingleton (IntegerType (*R 15 82)))
is a restriction of
	(FSingleton (IntegerType (*R 0 100))),
and so this value is approved by the function stored on TypicalSubUnit:VerifyValue.
Hallelujah!

---- Pause here for a moment -----

This was all rather straightforward.  Now to complicate the picture, with some
notes and embellishments.

0.  The term "restriction" need NOT refer to a PROPER restriction.
That is, x is always a restriction of x.

1. As mentioned above, a given RangeType may have to be a restriction of
a number of "superordinate" ranges.  For example, spse ships were both big objects
and water objects, and each of these had something to say about the cost of
its examples.  That is, (using the standard naming conventions)

AnyShip
  Isa:			(AnyClass)
  SuperClasses:		(AnyBigObject AnyAquaticObject)
  TypicalExample:	TypicalShip

TypicalBigObject
  Cost:			(*Do* FSeeUnit CostOfTypicalBigObject)

TypicalAquaticObject
  Cost:			(*Do* FSeeUnit CostOfTypicalAquaticObject)

CostOfTypicalBigObject
   RangeType:		(FSingleton (IntegerType (*R 50 100)))

CostOfTypicalAquaticObject
   RangeType:		(FSingleton (IntegerType (*R 11 85)))

	*** We now create ***

TypicalShip
  Cost:			(*Do* FSeeUnit CostOfTypicalShip)

	*** and then we try to ***
CostOfTypicalShip
   RangeType:		(FSingleton (IntegerType (*R 15 82)))

This should fail, as 
	(FSingleton (IntegerType (*R 15 82)))
is now required to be a restriction of both
	(FSingleton (IntegerType (*R 50 100)))
and
	(FSingleton (IntegerType (*R 11 85))).

Some obvious notes:
i) The range spec (FSingleton (IntegerType (*R 55 82))) would have passed.

ii) Realize we did not have to actually examine the Cost unit -- thanks to the
transitivity of the restriction relation.  In general, the only stipulation is
that the new range pass the requirement placed by each member, s, of its
immediate `superclass'.  A simplified version of this requirement is met by
examining each of the values (GetField s 'Cost 'RangeType).
This call will return either the value now stored in s:Cost:RangeType, 
(if it exists) or else is the superordinate restriction of this,
possibly up to the value of Cost:RangeType.

iii) Each of the *:SSF functions can be written by EVERYing along the
final n-1 args, applying an auxillary *:SSF-1 function, which takes only
a pair of args.  Of course this is just the quick and dirty solution --
in many cases this work could be shortcutted by, for example, first
intersecting those n-1 args, and seeing the first arg is a restriction of this.]

Next hassle: 
2. You may want (FSingleton x) to be a restriction of (FSet y).  It is
FS:SSF's job to permit (or prohibit) This.  

A convention:
Realizingthat the CARs od the various range specs can vary, we have to decide
which unit to examine to determife whether one spec is a restriction of another 
-- that is, do we ask FSet what its restrictions are
(ie can (FSingleton x) be a restriction of (FSet y),)
or aqk FSingleton for itq "extensions" -- iE could
α(FSat Y) posqibly be a genepadization kf (FSingleton x)?
	
Answer: GivEn that there may be any number of "extentions", and only one
proposeD restp¬SGi%←\XA%hA[C-KfAg∃]gJAQ↑ACg,AiQJ↓cS]O1JAπβHA←LAQQChAIKgie%GiS←8~∃M←HASif↓GeCi∃eSBA→←dAKaiK]I%]N\@↓⊃K]G∀XA
'%]OYKQ←\ASLAeKgA←]gS	YJAM=dAIK
SIS]≤~∃oQ¬hAM←I[Cif↓CeJA1KOCX↓KqiK9gSO]LvAC]⊂AiQSLAS]Mα{K7π&K?9βM→β∂?w#π';,!β'8hR~Mj≥~→84Ph*?→ε≠?WK≤)βS#M→βOSNc1β∪}+O9∨ βS↔3bβ#?]π#=βC/∪≠?KjβS#'~β∪W;≥#'?9ph*S#*βGW'≡Yβπ; β∪'K'IβO?g+S'?rβ'Mβ&yβO'oβ3eβ.sW7↔⊗S∃β&C∃β∪N3≠↔K.sP4&K≠≠↔⊗+;Qβ6{K7π'→β'9π##πQε3W;∂&K?9↓jiβ←#N≠!β7.;Mβ⊗+←K'&K;≥β&CπQβ7+;∂SN{84+∂→β;↔:β≠?KnSMβ∂∪∃βπ&#↔⊃↓jβW∨!r↓α?SF+K←'≡)βC↔⊗CπCMπK?Uβ≡{W3⊃¬;?K-ε3K?4hQ≠'↔≠QβC⊗K;∂'εc↔M	αiβeπ+O';:βS#∃εK;≠?⊗kπS'}qβπO≡{∂'π&+⊃β←O#!βSF)β≠?⊗kπQ∨_h*≠?⊗kπR∂FKπ∂&+I9↓h(4*&C∃βO∞k∃β'&+¬βππβ3'↔~βπMβN{Uβ∨zβ7↔K⊗K3eβ⊗+∂WK⊗K;≥β&{←9β&C∃βOε+∂'≠N≠πS'}qh4*≡c↔πKgIα';&+∨↔J'KC∃βλβK↔O'∪'∂SN{9β?2α;W7⊗+JSgε)↓55ε;⊃βF+;∂∀hR';S.;↔JSOβ∃jO/β↔JOε+∞≠9π≠#?Wf!βπ∨⊗+∃βSFQ↓"NsS↔∨/∩SgC*βa%βO→β¬β⊗+OSKN≠S'?ph+?→αB;W7⊗+JSgε)βe%ε3?Iβ
β3πK>)β∂3∂≠Mβ?2βa∨Mε;⊃βJ;M84Ph*S#*αW;'}r∩Qβ∞s⊃α'w#↔KO.≠R∩Qε3W;∂&K?;Mε#=βO}k↔S#Ns≥β3N[∃βSFKM84TK→α%π∪↔7↔n∪↔Iβ≡{KK↔∨#3eβ&C?O∃ε3W;∂&K?;Mπ+O↔⊃π≠?7∃ε3W;;JβO3?"β?9β.∂!β&SπSOβ∀4+>C'∂!π;πMβ/≠↔⊃β&yβ∂?w3↔KQε3K?5ε{;∃β&SπSOβ∃βSzβπ;?&C↔I8hR↔[↔rβS#↔rα%β#.k7↔⊃j17#π>+⊃βSG∪?W∨Bβ7?O"β?→β&C∃βK.1β'∨≠W↔Mph*3↔";MβO.)iβSF+K∃β∂∪∃βπg≠=βC␈#↔;SN1β#∂≠O3↔~β←'SBα16εt!1βπv!β≠KN+;∪Mr↓4*⊗{eα%>iβ∨3∞!β'Q?→βg?*βπ;⊃εs?Qβn)β←#␈≠∃βS∞≠/3'v9βS#O→84(hQM9αJβ';S.sS'?v33eπ+O↔⊃π##∃β≡7∃β≡c?Q1¬≠WC↔∃≠C↔∞6q1β≠␈⊃β≠?⊗kπSMbβ∪πS∂#gC↔~aβ↔S~p4*'rβπ31ε≠πO↔~β'Qβ&K⊃βπ⊗{WQβ&C∃βO∞k∃βSFK;≥↓jiβ'∃εKQβπg;πgMεC↔3⊃π##∃β7+;∂SN{84+>C'∂!ε#↔∂'&+⊃β←F+S#↔∩β?;∃π≠C↔∂N3'∂π&K?9β>Mβ¬π∪↔OS⊗K∂S'}qβ?→π≠?7∃ε{S#↔↔→84*JβK↔πfKk∃βv{]βSFQα≠␈∪7πS~aα∪π&SgC/→βπ;"β≠K'.s∪Mβ≡C?W3"β#π[*β↔↔rβ7?K(h+3/∪K↔⊃π#?∨↔&C↔I1ε31β∞c?;≥αi5βπ~βS#∃π∪↔π∪Jβ↔c'∨#↔;∂*β?→β&C'Mβ≡{77?rβO3? h+OW>;↔OS~p4(4S!9β←↔!β∂π≡C';≥π##∃β⊗+OW3"β?→β&C'Mβ≡{7CW&S'?r↓55β&{9∨Qph*S#∂!β'Mbβ?;∃ε≠?W3"β∨=β7∪?5β
βKπ;>)βOC.≠'≠'≡S'?rβ3'/*4(%D2O';>c↔S?r↓"';&+∨↔J'KC∃↓BRI↓E*↓aI%JH4+Szβ¬β3∞k∪¬ε+cCK/≠O'?raβ←#N≠!βK/#WK;~αQβ←F+;↔[/⊃β'S~βπK∨.k↔;QεKL4+
βK↔O'∪'∂SN{9↓#⊗+OAβ/CS↔;&K?9%ε{→βSFKMβC∂∪S'∂.cπIβ∨β↔∂'6K∂πSN{984TC?←↔6+I1βN{U∨3bβ;↔[/⊃β;↔.!βS=π+O∃β&C'MβNs≠?KnS'?rp4(4Ri555hh*←↔fa1βSFQ∨Mε31β6{Iβ;␈99↓α≡+;⊃βn)β¬βn+OOπ>)β'→αC↔S&+Iβ7∞[∃βSFQ↓>C↔9	Hh+g?*β≠';"β↔KK␈∪M1β␈⊃β∂?v3WO'}sM1βNqβS#O→84(hRKWO_h(4)ji554hR∂?7n+;SMε3K?5¬≠S↔[*α/3↔Nqβ?9β	QiAα↓]6+∞q5aHhR[↔KN3fπ3baβ;?"α[↔KN3f[πg+∀4*&C↔K∃εKMβ;z↓*I∧hP∂TO SKLEIN@ISIB 13:25 8-Jan
Some comments
Steve

(1)	I realized this morning that the defn of *vaLue* is wrong.
The HighLevelDefn says to apply the MyLivesInSlot slot to the 
value of (GetValue un 'MyLivesInUnit).
That's close: it should, however, apply the function stored on un:MyLivesInSlot 
to that un:MyLivesInUnit value.  As there is currently no direct mechanism for
doing that, we could define a function  GetFromPointer,
which takes a unit, un, and returns (essentially)
	(APPLY* (GetValue un 'MyLivesInSlot) (APPLY* (GetValue un 'MyLivesInUnit)))

The GetFromPointer unit would include some useful facts -- it rangetype should be
something like
	(FSingleton (UnrestrictedType (*FromDomain GFP-Fn)))
where GFP-Fn would take a unit and return something like 
'(*FromDomain *vaLue*Fn).  [Or something like that -- see MapCross-Fn, or whatever.]

The idea is for *vaLue*:RangeType to be
	(FSingleton (UnrestrictedType (*FromDomain *vaLue*Fn)))
where *vaLue*Fn takes a unit and returns the rangetype of the MyLivesInSlot of
that unit.

(2) Doug needs a brief, 1 page description of what's going on there - for some
report or other.  It doesn't have to be prose, just enough for him to understand
what sort of things youse guys are doing, and why you are using RLL.

It might be interesting to see, in addition, your agenda of things needed,
and fixes made.  (Basically for my edification...)

(3) Just a reminder: ComplexVV now calls (GetValue ? 'VerifyElement ...);
but should be calling a GetField - as the VerifyAll thing does.

(4) At Some point I should send over the macro stuff I have up and running here;
and the next batch of LISP files.  From there you could have the most updated
version.
(Until Rand and/or thesis stuff forces me back to hachery.)

(5) Some thoughts on EqualFormatSpec:
It would be a list, with each member of the form:  (<format> <function>).
[That is, EqualFormatSpec:RangeType = 
    (FSet (FListN (UnitType (*P AnyFormat))
		  (FunctionType (*Range (FListN UnrestrictedType))))).]
If (fmt2 fn2) was included on fmt1:EqualFormatSpec, then
if some value, val, was acceptable to fmt2, then (fn2 val) will qualify as
an instance of fmt1.  For example, FSet:EqualFormatSpec ==
      (	(FOrderedSet	IDENTITY)	; Any ordered set is already a set
	(FList		MKSET)		; this removed duplicated elements
	(FBag		MKSET)		; (removes duplicated elements)
	(FListN		Scream)		; could be MKSET, but this is safer
	(FSingleton	LIST)	)	; ie this list qualifies*

*: actually the function FakeList should be used, where
(FakeList (v) (COND ((EQ v NoEntry) NoEntries) ((MustComputep v) v) (T (LIST v)))).

Given this, UnionDT and IntersectDT may be easier to (re)write, as well as
SubSpecFn for formats.  Note it puts the facts (closer to) where they belong 
-- on FSet, etc., rather than within a few functions.

Two final notes:
(i) Finding (fmt2 fn2) included on fmt1:EqualFormatSpec restricts the
fn1 in the (fmt1 fn1) included on fmt2:EqualFormatSpec.  [Note it does not
completely define that fn1.]
(ii) Eventually it would be nice if EqualFormatSpec could be generated from
"first principles" -- looking on the various format's FormatCharacter.

----
That's all for now.  Let me know how your work load dwindles, and whether/how
this RLL marrass(sp) works.  I meandered over to ISIB last night, and found
the stuff we did unsaved! (or at least I couldn't find it).  

Hope things are going ok,
	Russ

∂11-Jan-82  1748	Steve Klein <SKLEIN at USC-ISIB> 	Re: Some comments    
To: RDG at SU-AI

I'll look over the first 90% of your mss. later, but you are right on the last
point.  I was on my way to the Consumer Electronics Show in Las Vegas just 
after talking to you and managed to logout without saving the RLL image we
were working in.  Good thing that the dribble file (presumably) still exists.
Murphy's law strikes again...
-------

∂13-Jan-82  1724	Steve Klein <SKLEIN at USC-ISIB> 	stufflets  
To: RDG at SU-AI

Accumulation of small things:

∂TO sklein@isib 20:28 13-Jan-82
Possible answers
**** My comments are interspersed.  enjoy...

1.  for Range restrictions, the original solution you wrote up talks of
  checking u:MyLivesInUnit 's SuperTypEx's for superspecs.  However,
  this only works for CLASS restrictions.  If the RangeType spec is found
  on a subunit for an INSTANCE, then it has no TypicalExampleOf slot and
  hence no SuperTypEx's.  
**** Q: Have you a scenario in which this occurs?  As you noted, the only
	place where a restriction currently makes sense is for classes --
	basically because I didn't see any other place where a restriction
	might occur...
  HOWEVER, the concept seems still valid, since
  it has some superior TypicalExamples.  What do you think of changing
  the defn of SuperTypEx (and rest of group) from 
     (Composition TypicalExample SuperClass TypicalExampleOf) to
     (Composition TypicalExample SuperClass Isa) ?
**** Hmmm - Independent of the first point above, this might still
	be a good idea. (Given that TypicalExampleOf is (essentially) a subslot 
	of Isa (I think).  The question again is, is this needed?  This will
	make the computation of SuperTypEx (potentially) more expensive, if one
	day we formally make Isa a complex slot.  When will you want a SuperTypEx
	of a non-typicalexample?  (Beyond that possible case of restricting
	from an instance.)

2.  I'm tentatively calling the slot you named SuperSpecFn 
   FnForVerifyingRangeRestriction (unless you have an objection).
**** Sure - it's you who'll have to type that Moby-name.
	But I think it does convey the correct idea.

3.  Following convention, the fn on RangeTypeOfTypicalSubUnit:VerifyAll
   seems to look like (LAMBDA (un sl val ...].  Is it the case that the
   sl parm is ALWAYS RangeType for this fn?
**** Sorry - "sl parm"?  Please explain.

4.  Is the other parm for *vaLue*:ToCompute that you were speaking of
     -COMPUTE or something else?
**** Yes (to the disjunct), it was something else: IGNORE-CACHE.
So the call should be something like
(PROG ((u (GetValue un 'MyLivesInUnit '(SAFESLOT)))
       (s (GetValue un 'MyLivesInSlot '(SAFESLOT))))
   (RETURN (GetValue u s `(SAFESLOT (-CACHE (,u ,s)) (IGNORE-CACHE (,u ,s))))))

[which, unless the "s" slot is exceptional, is about the same as
	(UnitFnGV (GetValue un 'MyLivesInUnit '(SAFESLOT))
		  (GetValue un 'MyLivesInSlot '(SAFESLOT))
		  '(SAFESLOT)),
sorta]

The idea is to IGNORE the value stored in u:s -- that will be the
(*Do* FSeeUnit sOfu), which, if investigated, will lead to an infinite
recursion.  Note we don't want to store this computed value on u:s -- instead
it will be up to *vaLue*:ToCacheValue to decide what to do with this.
Maybe this function could meander about, and caching the value only if
s:ToCacheValue said to do so.  (ie something like
(LAMBDA (uN sL vAL ...) (* Note sL = *vaLue*, and uN is a subunit.)
	(APPLY* (GetValue (GetValue uN 'MyLivesInSlot) 'ToCacheValue)
		uN sL vAL ...))

5.  If each of the FnForVerifyingRangeRestriction fns takes only a pair
   of specs and the "loop" is done in RangeTypeOfTypicalSubUnit:VerifyAll,
   things seem to look simpler. See anything wrong with this?
**** I think not - but perhaps I'm just confused.  Could you spell out
your proposal.  (It sound like you think you're going to keep hitting
RangeTypeOfTypicalSubUnit:VerifyAll, which is NOT the case.)

6.  If I actually use the EqualFormatSpec approach instead of punting when
   there isn't a match, exactly what should be done?  The information
   that is encapsulated in the transformation function doesn't help
   in verifying that two specs are equivalent (at least to me).  I wouldn't
   necessarily think that you would want to actually do the transformation
   and see what results as a way of telling whether it is legal...
   Also not clear whether some mapping of the sub-specs needs to be done
   DEPENDENT upon the particular mapping at this un-equal level...
   Any enlightenment?

**** Depends on what you consider to be a legitimate subrange.  I, for example,
feel queasy at the prospect of letting something of format FSingleton be a
restriction of a FSet format -- but you indicated this is acceptable.
Possibility one: only include fmt2 on fmt1:EqualFormatSpec if it is a legal
restriction -- this makes the task trivial -- just use ASSOC.
If you want to include other formats, then you may have to do something like
include another field - indicating its acceptability as a restriction;
or possibly here's a place when your could use the FormatCharacter slot directly,
(avoiding this EqualFormatSpec altogether): by indicating which of the
characteristics must be the same, or how different.  Yes, 'twould be a bag of
worms, but might be worthwhile in the long run.
-------

Hi.  Any additions to the following list of fns to be recorded when
called from LISPX level?

   AddField  AddValue
   DeleteField
   KillField  KillValue
   PutField  PutValue
   SubstField  SubstValue
   UA-PUT
	**** Why this one?  (/\)
   UA-PUTPROP
	[remember to twiddle EDITU to use this \fn.]

I think I'll assume all changes are written to a single file and a filter
predicate will be applied at load time to pick the ones to be executed.  
	**** Yes, this makes sense.  
	How will you address the case of when a function breaks?
Otherwise there is no (reasonable) way to keep the sequencing straight
between the calls that would appear on several files.
-------

**** Russ

∂13-Jan-82  1912	Steve Klein <SKLEIN at USC-ISIB> 	recording changes    
To: RDG at SU-AI
∂11-Jan-82  1745	MANN at USC-ISIB 	citing our use of RLL 
To:   CSD.LENAT at SU-SCORE
cc:   SKLEIN, RDG at SU-AI

Doug:

Steve Klein has passed on to me a message from Russ, indicating
that you would like to cite our work as consumers or testers of
RLL.

That would certainly be appropriate when we  are  farther  down
the  road,  but  in fact we have not yet accomplished our first
act of testing with RLL.  In terms of the projections which  we
made  in  June, we have not yet done the first 6 weeks of work.
So, aside from being a source of an independent  viewpoint  and
independent  demands,  there  is  not  yet  anything  which  is
technically significant from the project plan point of view.

Many  things  turned  out  to  be  harder than we had imagined.
There were major implementation steps for subfields, and we are
now working with Russ on a revision of range specifications and
checking, making inheritance work right.  There have also  been
delays on both ends that had nothing to do with effort.

We think that we're just a couple of weeks away from having our
minimal toy example running.  Beyond that, we would like to put
in enough knowledge  to  support  generation  of  our  favorite
sentence.  At that point perhaps a citation would be justified.

If we wait until there is an identifyable  accomplishment,  how
does  that fit with your time schedule?  Perhaps we are talking
in real weeks rather than virtual weeks, although,  of  course,
we can't tell.

(Naturally, I'm curious about who the audience is.)

Let  me know if you'd like me to write some paragraphs.  I'd be
happy to.

Cheers.

Bill
-------

∂12-Jan-82  1011	Doug Lenat <CSD.LENAT at SU-SCORE> 	Re:  citing our use of RLL   
To: MANN at USC-ISIB
cc: SKLEIN at USC-ISIB, RDG at SU-AI

Bill,

Thanks, I would appreciate a paragraph or two summarizing your intended
use.  The citation Russ mentioned is not for external use, but
rather for my internal review next month (I come up for reappointment
at Stanford).  We are also about six weeks further along than
we were in June!  Anyway, let me know when/if you run into snags
witht he language.
Regards
Doug
-------

∂26-Jan-82  2013	Steve Klein <SKLEIN at USC-ISIB> 	awoof 

Hi.  Typically, I got diverted onto other matters again.  Got your
example (TypicalShip stuff) through almost to completion, so I suppose
that about 95% of the "task" is done...should be easy to then test our
first example (the time units).  Several questions, of course, came up.
I should be back on track and have things "proved" near the end of the
week--get back to you then to go over the results, etc.  Enjoy.
-------